我正在使用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是{"status":"Entity added successfully."}
我的观察:似乎我需要在某个地方为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();
}
答案 0 :(得分:1)
我想出了'MessageBodyReader'和'MessageBodyWriter'的用法,我发现实现这两个接口的需要只是将解析逻辑与核心业务逻辑分开。因为我已经为我实现了解析器,所以我不得不改变我的解析代码以利用接口。
所以,我决定返回String
并设置response type as Json
,因为我在处理后已经有了Json字符串。
所以现在我的代码看起来像:
@Produces(MediaType.APPLICATION_JSON)
public String addEntity(@FormParam("entity") String jsonEntity, @FormParam("entityType") String jsonEntityType) {
JsonObject jSonStatus = null;
....
....
return JsonStatus.toString;
}
要检查Advance Rest client
中的回复,它会显示正确的Json Content-Type: application/json
注意:如果我没有处理重要的事情,请发表评论。