首页 文章

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

提问于
浏览
1

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

找不到媒体类型= application / json的typeBodyWriter,类型= class 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

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

    register(JettisonObjectProvider.App.class);
    

    在此之后,创建响应,如

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

    像球衣1一样工作 .

相关问题