11

使用 jax-rs(Jersey) 我尝试实现一个带有 JSON 对象列表的 POST 请求

//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;
}
}

当我尝试使用 curl 测试 REST api 时,我总是收到“错误请求”错误,我在这里遗漏了什么吗?

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
4

4 回答 4

4

如果您不介意更改方法的签名:

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());
于 2012-06-28T15:22:52.283 回答
2

一个迟到的答案,但可能对其他人有帮助发布这个:

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

因为通过发送这个:

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

您正在发布一个具有单个“SomeObj”命名属性的对象。您没有发布数组

于 2014-12-29T17:39:22.117 回答
0

尝试将您的 JSON 数组包装在一个对象中,例如:

@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
于 2016-06-29T16:02:38.743 回答
-3

在服务器端:

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
}

在客户端:

$.ajax(
{
    type: "GET",
    url: '/your-web-service/wants-json-array',
    data: JSON.stringify(THEARRAYYOUARESENDINGTOTHESERVER),
    contentType: "application/json",
    dataType: "json",
    processData: false
});
于 2013-02-27T05:28:30.470 回答