Jersey返回一个JSONObject

时间:2014-09-02 19:37:57

标签: java json jersey jsonobject

可以在泽西岛返回JSONObject吗? 这是我想要实现的目标:

@Path("/path")
@get
@Produces(MediaType.APPLICATION_JSON)
public JSONObject foo()
{
    ...
    JSONObject json = getJsonObject();
    return json;
} 

我尝试对上面的代码进行编码,但在JSONObject类的getter和setter方面遇到了一些错误。

有什么建议吗?

这是我得到的堆栈跟踪:

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)

2 个答案:

答案 0 :(得分:1)

出于某种原因我的情况

 @Produces("application/json");

没有回来一个json。

所以我使用了:

 @produces(MediaType.APPLICATION_JSON);

另一种选择。

答案 1 :(得分:0)

首先,您只需输入

即可返回json
@Produces("application/json")

因为Jersey会知道输出是json格式的,但是我不知道为什么你使用JSONObject,你可以使用任何Class,服务器只需要放入json就可以转换它

@XmlRootElement
public class MyClass {} 

MyClass现在可以像返回类型一样使用,因此以这种方式更简单方便。

示例:

@XmlRootElement
public class MyClass{
}

@GET
@Consumes("application/json")
public MyClass putJson(){
return new MyClass();
}

服务的客户端将看到一个代表该类所有属性的json。

PD:如果您遇到MessageBodyProviderNotFoundException等异常,则需要在依赖项中添加Genson

相关问题