2012-03-02 54 views
0

我有一个用Apache Wink 1.0编写的简单Web服务,我想接收并返回JSON数据。我简单的JSON JAX-RS Web服务有什么问题?

根据眨眼的文档,这应该工作...

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public JSONObject postJSON(JSONObject requestJSON) { 
    JSONObject jobj = new JSONObject(); 
    return jobj; 
} 

...但我看到这个错误,当我试着打了Web服务......

org.apache.wink.server.internal.handlers.PopulateResponseMediaTypeHandler - 
Content-Type not specified via Response object or via @Produces annotation 
so automatically setting via generic-type compatible MessageBodyWriter providers 

..任何意见或建议,非常感谢!

Rob

+0

您是否尝试过[“应用/ JSON”(http://incubator.apache.org/wink/1.0/html/JAX-RS%20Request% 20于是%20Response%20Entities.html)? – Thomas 2012-03-02 18:33:54

+0

是的,尝试过,结果相同。 – 2012-03-02 18:41:04

+0

奇怪的错误。该定义看起来是正确的,但是如果这是一个org.json.JSONObject,那么我不确定它的可序列化。尝试将您的返回类型更改为String,以确保至少所有的路径都是正确的。此外,如果可以,请发布您的电话签名。 – Perception 2012-03-02 18:47:23

回答

1

JSONObject的使用有点奇怪。更容易和更灵活的方法:

public MyDto postJSON(MyDto dto) { 
    //do something 
    MyDto md = new MyDto(); 
    return md; 
} 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class MyDto { 
    private String f1; 
    private int f2; 
    //etc. 
} 

JAX-RS将序列化MyDto做JSON。事实上,更清洁的方法是返回响应对象

public Response postJSON(MyDto dto) { 
    //do something 
    MyDto md = new MyDto(); 
    return Response.ok(md); 
}