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

标签 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>

这是我的资源配置:

@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;
    }
}

当我尝试运行它时,我得到:

严重:找不到媒体 type=application/json、type=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 com.oracle.swr.ws.mavenproject3.ApplicationConfig 的 Servlet.service() 抛出异常 org.jboss.weld.exceptions.UnsatisfiedResolutionException:WELD-001308:无法解析类型的任何 bean:[org.glassfish.jersey.message.filtering.spi.ObjectProvider];绑定(bind):[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 工作的真正简单的例子?

最佳答案

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

关于json - 如何在 Glassfish 4 上创建一个简单的 JSON Jersey 2.x RESTful Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30379540/

相关文章:

java - 如何在rest api的HTTP方法的请求和响应中应用Json序列化或反序列化

javascript - 使用 Jquery、Json 和循环访问脚本内的 HTML 内容

java - 在 Spring Data Rest 中保留 OneToMany 关系

c++ - Arduino云桥: simple command failing

java - 如何在 REST Web 服务服务器端接收 "Accept" header

java - 如何在 CXF Jaxrs 中连接过滤器?

java - Glassfish 4 无法在 Linux 上启动

javascript - 使用 Jquery 重新格式化 json 数据

java - 在 Glassfish 中强制清除 EJB3 缓存

java - 无法在 Glassfish 4.0 中执行 CDI