我最近升级到Jersey 2.x,当我打电话给这个网络服务时:
@GET
@Path("/mocks")
@Produces(MediaType.APPLICATION_JSON)
public String getIt() {
List<Date> list = new ArrayList<>();
list.add(new Date());
list.add(new Date());
list.add(new Date());
return Response.status(200).entity(list).build();
}
我收到以下错误消息:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=class java.util.ArrayList.
完整输出如下:
javax.servlet.ServletException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:
MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=class java.util.ArrayList.
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:391)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
我注释掉了依赖
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
并再次发生同样的事情。然后我尝试添加以下依赖项,但没有改变:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.1</version>
</dependency>
关于如何解决的任何想法?
答案 0 :(得分:3)
如果您想将Jackson用作JSON提供程序,请尝试添加以下依赖项。
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>[required-version]</version>
</dependency>
然后在JacksonFeature
注册Configurable
。
public class MyConfig extends ResourceConfig {
public MyConfig() {
register(JacksonFeature.class);
...
}
}
MOXy媒体模块是您无需在客户端/服务器MoxyJsonFeature
中明确注册其功能(Configurable
)的模块之一,因为此功能会在您添加时自动发现并注册jersey-media-moxy
模块到您的类路径。
手动注册任何其他Jersey JSON提供程序功能会禁用MoxyJsonFeature
的自动启用和配置。
答案 1 :(得分:3)
从Jersey 2.9开始,禁用自动发现,为了像以前的版本一样启用它,您需要为jersey-metainf-services添加依赖项。
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-metainf-services</artifactId>
<version>your_version</version>
</dependency>
答案 2 :(得分:1)
您需要通过下载以下任何jar和amp;来启用您的JSON支持。将其放在WEB-INF / lib。
中JSON-P(8.1.3),Jackson(8.1.4)或Jettison(8.1.5)或者如果其他人工作不正常你也可以试试这个--Genson https://code.google.com/p/genson/
希望它有所帮助!!