如何在Glassfish 4上创建简单的JSON Jersey 2.x RESTful Web服务?

时间:2015-05-21 16:35:15

标签: json rest glassfish jackson jersey-2.0

我花了好几天试图解决这个问题。我想要做的就是创建一个简单的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的工作?

2 个答案:

答案 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,除非泽西使用是严格的要求。