我花了好几天试图解决这个问题。我想要做的就是创建一个简单的Web服务,将POJO列表作为JSON返回。为什么这么难?
我从POM开始:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
这是我的ResourceConfig:
@ApplicationPath("reservations")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
packages("com.oracle.swr.ws.mavenproject3",
"com.fasterxml.jackson.jaxrs.base");
}
}
这是我的资源:
@Path("/bookedAssets")
public class GenericResource {
@Context
private UriInfo context;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getJson() {
List<String> strings = new ArrayList<>();
strings.add("test");
strings.add("test2");
return strings;
}
}
当我尝试运行它时,我得到:
严重:找不到媒体类型= application / json的MessageBodyWriter,type = class java.util.ArrayList,genericType = class java.util.ArrayList。
我修改了我的ResourceConfig以尝试使用JacksonFeature:
public ApplicationConfig() {
super(GenericResource.class, JacksonFeature.class);
}
我收到此错误消息:
警告:StandardWrapperValve [com.oracle.swr.ws.mavenproject3.ApplicationConfig]:servlet com.oracle.swr.ws.mavenproject3.ApplicationConfig的Servlet.service()抛出异常 org.jboss.weld.exceptions.UnsatisfiedResolutionException:WELD-001308:无法解析类型的任何bean:[org.glassfish.jersey.message.filtering.spi.ObjectProvider];绑定:[QualifierInstance {annotationClass = interface javax.enterprise.inject.Default,values = {},hashCode = 633679645}]
我在POM中尝试了很多不同的组合。没运气。我已经阅读了Jersey文档。没运气。
这家伙说Jersey文档是垃圾,而是这样做:http://jersey.576304.n2.nabble.com/Beware-of-JacksonFeature-in-Jersey-td7581633.html。试了一下。没有运气。
有没有人有一个非常简单的例子来获得GF 4.x,Jersey 2.x,Jackson 2.x的工作?
答案 0 :(得分:2)
(来自@peeskillet的评论) 我取代了这个:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
使用:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.5.3</version>
</dependency>
和
packages("com.fasterxml.jackson.jaxrs.base");
使用:
packages("com.fasterxml.jackson.jaxrs.json");
答案 1 :(得分:-1)
我建议使用DropWizard而不是直接使用Jersey。 DropWizard很好地集成了东西(泽西岛,杰克逊,日志等),设置也很轻松。或者,您可以考虑Spring Boot,除非泽西使用是严格的要求。