Jax-rs(Jersey) to Consumes Array of Json object in POST request

匿名 (未验证) 提交于 2019-12-03 08:36:05

问题:

Using the jax-rs(Jersey) I am try to implement a POST request that take a list of JSON object

//The resource look like this @Path("/path") @POST @Consumes(MediaType.APPLICATION_JSON) public void setJsonl(List<SomeObj> test) {   //do work   System.out.println(test); }   //The class to define the json structure @XmlRootElement public class SomeObj{  private String tag; private String value;  public String getTag() {  return tag; }  public void setTag(String tag) {   this.tag = tag; }  public String getValue() {   return value; }  public void setValue(String value) {   this.value = value; } } 

how ever when I try to test the REST api using curl I always get a "bad request" error, am I missing something here?

curl -X POST -H "Content-Type: application/json" -d '{"SomeObj":[{"tag":"abc", "value":"ghi"},{"tag":"123", "value":"456"}]}' http://{host_name}:8080/path_to_resource 

回答1:

If you don't mind changing the signature of your method:

import org.json.JSONArray;      //The resource look like this     @Path("/path")     @POST     @Consumes(MediaType.APPLICATION_JSON)     public void setJsonl(String array){         JSONArray o = new JSONArray(last_data);         System.out.println(o.toString()); 


回答2:

a late answer but may be helpful for others Post this:

[{"tag":"abc", "value":"ghi"},{"tag":"123", "value":"456"}]

Because by sending this:

{"SomeObj":[{"tag":"abc", "value":"ghi"},{"tag":"123", "value":"456"}]}

you are posting an object with a single 'SomeObj' named property. you are not posting an array



回答3:

Try wrapping your JSON array inside an object like:

@XmlRootElement  public class SomeObjListWrapper { private List<SomeObj> list; // getters and setters }  curl -X POST -H "Content-Type: application/json" -d '{"list":[{"tag":"abc", "value":"ghi"},{"tag":"123", "value":"456"}]}' http://{host_name}:8080/path_to_resource 


回答4:

On the server side:

import _root_.org.codehaus.jettison.json.{JSONArray, JSONObject} @POST @Path("/wants-json-array") @Consumes(Array(MediaType.APPLICATION_JSON)) def wantsJSONArray(array: JSONArray): Response = {     // here's your array } 

And on the client side:

$.ajax( {     type: "GET",     url: '/your-web-service/wants-json-array',     data: JSON.stringify(THEARRAYYOUARESENDINGTOTHESERVER),     contentType: "application/json",     dataType: "json",     processData: false }); 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!