【问题标题】:Jersey return a JSONObjectJersey 返回一个 JSONObject
【发布时间】:2014-09-02 19:37:57
【问题描述】:

是否可以在泽西岛返回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)

【问题讨论】:

  • 为什么不返回String 并执行json.toString()
  • 显示完整的堆栈跟踪以查看错误。
  • @bigdestroyer 我添加了一个堆栈跟踪

标签: java json jersey jsonobject


【解决方案1】:

首先,您可以通过 put 返回一个 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

【讨论】:

    【解决方案2】:

    在我的情况下出于某种原因

     @Produces("application/json");
    

    没有返回 json。

    所以我改用:

     @produces(MediaType.APPLICATION_JSON);
    

    另一种选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多