如何在Apache CXF jax-rs(REST)中将JSON数据作为请求主体提交

时间:2011-04-30 20:22:41

标签: java json jax-rs cxf

我使用Apache-CXF创建REST Web服务并尝试提交表单。

服务器:
这是我的方法,预计会得到json数据。

@POST
@Path("/addCustomer/")
@Consumes(MediaType.APPLICATION_JSON)

//{"Customer":{"name":"Some Name","id":6}}

public Customer addCustomer(Customer customer){

   logger.debug(customer);
   return customer;

}

客户端: 我使用firefox REST插件提交请求: 使用REST客户端,我发布了以下json作为请求正文:

{"Customer":{"name":"Arnav Awasthi","id":6}}

但我得到了"415: Unsupported Media Type"

7 个答案:

答案 0 :(得分:3)

使用restclient,一个用于fire fox的插件,并将http标头添加为Accept:application / json,content-type:application / json。

答案 1 :(得分:2)

你必须找到一种方法来告诉firefox将content-type设置为application / json。该错误表明它正在发送其他内容。

答案 2 :(得分:2)

对于迟到的回答感到抱歉,但它可能会对其他人有用。

您应该使用JAXB的@XmlRootElement对Customer类进行双重检查,因为jackson需要它来反序列化JSON消息。

答案 3 :(得分:1)

前段时间我有同样的错误。 似乎根本原因是异常“在请求类中找不到消息正文阅读器”。

根据http://www.javatips.net/blog/2012/02/cxf-restful-tutorial 我添加了jettison库来解决这个问题。

答案 4 :(得分:1)

我使用CXF 2.7.4与Jasckon 2.X.X面临同样的问题。但是当我升级到CXF 2.7.7时,它已得到修复。或者使用Jackson 1.9.X和CXF 2.7.4。

答案 5 :(得分:0)

您必须添加自定义标头以通知客户端您要发回的数据类型 例如: 标题名称:内容类型 标题值:application / json

答案 6 :(得分:0)

我遇到了同样的问题。解决方案是从json字符串中删除bean类名。 在你的情况下,应该作为正文发送的Json是

{"name":"Arnav Awasthi","id":6}