Java 从Rest Webservice发送Json[Gson实现]

Java 从Rest Webservice发送Json[Gson实现],java,json,web-services,gson,Java,Json,Web Services,Gson,我正在使用Gson库处理Json到java实体的解析,反之亦然。 现在,在处理完后,需要将Json对象返回给调用方。 但这样做会导致以下例外情况: Mar 25, 2014 4:46:30 PM com.sun.jersey.spi.container.ContainerResponse write SEVERE: A message body writer for Java class com.google.gson.JsonObject, and Java type class com.go

我正在使用Gson库处理Json到java实体的解析,反之亦然。 现在,在处理完后,需要将Json对象返回给调用方。 但这样做会导致以下例外情况:

Mar 25, 2014 4:46:30 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java class com.google.gson.JsonObject, and Java type class com.google.gson.JsonObject, and MIME media type application/json was not found
Mar 25, 2014 4:46:30 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: The registered message body writers compatible with the MIME media type are:
处理后的Json为
{“状态”:“实体添加成功”。}

我的观察结果:似乎我需要在某处注册Json的
Gson
实现,让容器知道我将使用Gson的JsonObject发送Json数据。如果我观察正确,那么我应该在哪里注册,如何注册,或者如果我完全错了,那么请纠正我

我的实现如下所示:

@POST
@Path("/entity")
@Produces(MediaType.APPLICATION_JSON)
public Response addEntity(@FormParam("entity") String jsonEntity, @FormParam("entityType") String jsonEntityType) {
    JsonObject jSonStatus = null;
    log.info("Entered webservice method: " + jsonEntity.toString() + "\n" + jsonEntityType.toString());
    if (jsonEntity != null && jsonEntityType != null) {
        dispatcher = dispatcher.getDispatcher();
        jSonStatus = dispatcher.addEntity(jsonEntity, jsonEntityType);
    }
    log.info("Returning from webservice method: " + jSonStatus);
    ResponseBuilder rb = new ResponseBuilderImpl();
    // rb.type(MediaType.APPLICATION_JSON);   tried with this also, but no luck
    rb.entity(jSonStatus);
    rb.status(Status.OK);

    return rb.build();
}

我了解了“MessageBodyReader”和“MessageBodyWriter”的用法,发现实现这两个接口的需要只是将解析逻辑与核心业务逻辑分开。因为我已经为自己实现了解析器,所以我必须转换解析代码以利用接口

因此,我决定返回
字符串
,并将
响应类型设置为Json
,因为处理后Json字符串已经可用

现在我的代码看起来像:

    @Produces(MediaType.APPLICATION_JSON)
    public String addEntity(@FormParam("entity") String jsonEntity, @FormParam("entityType") String jsonEntityType) {
        JsonObject jSonStatus = null;
        ....
        ....    
        return JsonStatus.toString;
}
为了检查
advancerestclient
中的响应,它显示了正确的Json,内容类型为:application/Json


注意:如果我没有注意到一些重要的事情,请发表评论。

我能想到的一个选项是返回正常的
String
,因为json只不过是有组织的
String
。请检查这个答案:@Wintermute建议链接将我引导到正确的方向,但是如果链接中提到了
Writer
类,那么除了javadoc之外,他们的实现是否还有参考文档