1

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

找不到媒体类型 = 应用程序/json、类型 = 类 org.codehaus.jettison.json.JSONObject、通用类型 = 类 org.codehaus.jettison.json.JSONObject 的 MessageBodyWriter。

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 提供程序工作?

我在问正确的问题吗?

谢谢你,汤姆

4

1 回答 1

0

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

register(JettisonObjectProvider.App.class);

在此之后,创建响应

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

就像球衣 1 一样工作。

于 2018-01-12T16:02:29.927 回答