2014-09-02 55 views
1

是否有可能在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) 
+2

爲什麼不返回'String'並執行'json.toString()'? – 2014-09-02 19:38:23

+0

顯示完整的堆棧跟蹤以查看錯誤。 – 2014-09-02 20:17:21

+0

@bigdestroyer我添加了一個堆棧跟蹤 – vlio20 2014-09-02 20:55:59

回答

0

首先,你可以返回一個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

1

在我的情況下出於某種原因

@Produces("application/json"); 

沒有返回一個JSON。

所以不是我用:

@produces(MediaType.APPLICATION_JSON); 

的替代品。