将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提供程序使用?
我问的是正确的问题吗?
谢谢你, 汤姆答案 0 :(得分:0)
Jettison对MessageBodyWriter
有一个MessageBodyReader
和org.codehaus.jettison.json.JSONObject
。出于某种原因,即使使用jettison版本,它也不会被自动发现。 2.9(至少对我来说,情况就是这样)。也许是因为它没有用@Provider
注释。
为我解决这个问题的方法是手动将相应的类添加到我的ResourceConfig:
register(JettisonObjectProvider.App.class);
在此之后,创建响应,如
Response.ok(new JSONObject(), MediaType.APPLICATION_JSON).build();
就像球衣1一样。