Jersey 1到2迁移,使用org.codehaus.jettison包(找不到媒体类型= application / json的MessageBodyWriter)

时间:2016-02-08 15:30:08

标签: json jersey jettison

将OSGi / Spring Web应用程序更新到Jersey 2.目前正在使用Jersey 2进行编译和安装,但在访问我们的资源时出现此错误:

  

找不到媒体类型= application / json的MessageBodyWriter,类型=类org.codehaus.jettison.json.JSONObject,genericType = class   org.codehaus.jettison.json.JSONObject。

org.codehaus.jettison.json的当前配置详细信息为泽西的“媒体提供者”。

•增加了对jersey-media-json-jettison的依赖

•我在web.xml中使用glassfish特定的init-param指定org.codehaus包:

<init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>
                    org.codehaus.jettison.json,
                    ...
      </param-value>
</init-param>

•在我们的webapp包bnd文件中添加了包:

org.codehaus.jettison.json,\

这表明它已成功在OSGi控制台中导入它:

Imported packages  

org.codehaus.jettison.json; version="1.3.3"

控制台还会显示jersey-media-json-jettison软件包正在使用的软件包:

packages org.codehaus.jettison.json  
 org.codehaus.jettison.json; version="1.3.3"<org.codehaus.jettison.jettison_1.3.3 [121]>  
    org.glassfish.jersey.media.jersey-media-json-jettison_2.22.1 [192]    

这里有什么想法来配置json提供程序?

使用org.codehaus.jettison软件包是否需要编程配置才能作为json提供程序使用?

我问的是正确的问题吗?

谢谢你, 汤姆

1 个答案:

答案 0 :(得分:0)

Jettison对MessageBodyWriter有一个MessageBodyReaderorg.codehaus.jettison.json.JSONObject。出于某种原因,即使使用jettison版本,它也不会被自动发现。 2.9(至少对我来说,情况就是这样)。也许是因为它没有用@Provider注释。 为我解决这个问题的方法是手动将相应的类添加到我的ResourceConfig:

register(JettisonObjectProvider.App.class);

在此之后,创建响应,如

Response.ok(new JSONObject(), MediaType.APPLICATION_JSON).build();

就像球衣1一样。