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

How do I create a simple JSON Jersey 2.x RESTful web service on Glassfish 4?

我花了好几天时间试图解决这个问题。我想要做的就是为 return POJO 列表创建一个简单的 Web 服务作为 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>

这是我的资源配置:

@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、类型=class java.util.ArrayList、genericType=class java.util.ArrayList 的 MessageBodyWriter .

我修改了 ResourceConfig 以尝试使用 JacksonFeature:

public ApplicationConfig() {
    super(GenericResource.class, JacksonFeature.class);
}

我收到此错误消息:

警告:StandardWrapperValve[com.oracle.swr.ws.mavenproject3.ApplicationConfig]:Servlet.service() for servlet com.oracle.swr.ws.mavenproject3.ApplicationConfig 抛出异常 org.jboss.weld.exceptions.UnsatisfiedResolutionException:WELD-001308:无法解析类型的任何 beans:[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 工作的真正简单的例子?

我建议使用 DropWizard 而不是直接使用 Jersey。 DropWizard 很好地集成了东西(Jersey、Jackson、logging 等)并且设置起来很容易。或者你可以考虑 Spring Boot 除非 Jersey 的使用是一个严格的要求。

(来自@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");