向apache-cxf jax-rs(REST)服务提交对象列表时出错

时间:2011-05-01 09:28:46

标签: json cxf jax-rs

我想以下列方式发布JSON中的客户列表:

@POST
@Path("/addCustomers/")
@Consumes(MediaType.APPLICATION_JSON)
public List<Customer> addCustomers(List<Customer> list){
logger.debug(list);
    return list;
}

Request Header:
Content-Type: application/json

Request Body:
{"Customer":[{"id":2999,"name":"Som Awasthi"},{"id":3000,"name":"Arnav Awasthi"}]}

Response: "415: Unsupported Media Type" error.

此请求的输入是相同的,我在listCustomers调用中得到的内容如下:

@GET
@Path("/listCustomers")
public List<Customer> listCustomers(){
List<Customer> list = new ArrayList<Customer>();
list.add(new Customer("Som Awasthi", 2999L));
list.add(new Customer("Arnav Awasthi", 3000L));

return list;
}

所以我希望输入应该给我List对象。但它给了我不支持的媒体类型错误。

此致 阿纳夫

2 个答案:

答案 0 :(得分:3)

最后,我通过一个讨论找到了解决方案:

http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-td4361669.html

摘要是: Apache-CXF 2.3.0和Jettison 1.2不支持此功能。所以我不得不将版本更改为2.3.4并且它有效。

示例应用程序: https://bitbucket.org/arnavawasthi/apache-cxf-jaxrs-spring

希望能帮助其他人面对同样的问题。

谢谢, Arnav

答案 1 :(得分:0)

尝试在您的请求中添加Accept标头:

Accept: application/json

另外,请确保您的请求绝对是POST。

编辑:

所以你传入的json是一个内部有数组的对象。尝试传递一个客户对象数组:

[{"id":2999,"name":"Som Awasthi"},{"id":3000,"name":"Arnav Awasthi"}]