Jersey返回一个JSONObject
问题描述:
是否有可能在Jersey中返回一个JSONObject
? 这是我想实现:Jersey返回一个JSONObject
@Path("/path")
@get
@Produces(MediaType.APPLICATION_JSON)
public JSONObject foo()
{
...
JSONObject json = getJsonObject();
return json;
}
我想上面代码中的,但得到有关的getter和JSONObject
类的制定者一些错误。
有什么建议吗?
这是我得到的堆栈跟踪:
org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))
org.codehaus.jackson.map.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:52)
org.codehaus.jackson.map.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:25)
org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:610)
org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:256)
org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:1604)
org.codehaus.jackson.jaxrs.JacksonJsonProvider.writeTo(JacksonJsonProvider.java:558)
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.writeTo(JacksonProviderProxy.java:160)
com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:302)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1510)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
答
首先,你可以返回一个JSON只把
@Produces("application/json")
随着泽西就知道输出是JSON格式,但我不知道你为什么使用JSONObject,你可以使用任何类,服务器将它转换成json,只需输入:
@XmlRootElement
public class MyClass {}
MyClass现在可以像返回类型一样使用,所以更简单方便。
实施例:
@XmlRootElement
public class MyClass{
}
@GET
@Consumes("application/json")
public MyClass putJson(){
return new MyClass();
}
的服务的客户端会看到,代表类的所有atributes一个JSON。
PD:如果您有类似MessageBodyProviderNotFoundException的异常,则需要在依赖项中添加Genson。
答
在我的情况下出于某种原因
@Produces("application/json");
没有返回一个JSON。
所以不是我用:
@produces(MediaType.APPLICATION_JSON);
的替代品。
为什么不返回'String'并执行'json.toString()'? – 2014-09-02 19:38:23
显示完整的堆栈跟踪以查看错误。 – 2014-09-02 20:17:21
@bigdestroyer我添加了一个堆栈跟踪 – vlio20 2014-09-02 20:55:59