使用Jetty设置Jax-rs 2.2

时间:2013-08-23 22:03:29

标签: java json jersey jetty

我尝试使用Jersey JAXRS在Jetty上设置一些REST服务。但我无法将json数据传递到我的REST服务类。我的ajax请求不断获取"不支持的媒体类型"错误和状态。无论我添加到我的方法中的@Produces@Consumes注释是什么,我都会得到这个,尽管它们都应该是MediaType.APPLICATION_JSON

我无法在泽西岛上找到合适的文档,而且大量问题,博客和其他资源似乎都已过时。看起来泽西岛最近经历了很多变化,我不知道应该在哪里看。我根据球衣webapp原型设置了以下内容:

的web.xml:

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.my.package.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

代码段:

@Path("/users")
public class UserService {

    // Plain text works!
    @GET
    @Consumes(MediaType.TEXT_PLAIN)
    public String list(){
        return "Got it!";
    }

    // JSON doesn't work! >:(
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public User create(User user) {
        Mocks.USERS.add(user);
        return user;
    }

我的父pom管理这些依赖项啊这两个中的第二个是我的jax-rs项目pom中的依赖项。

<dependency>
    <groupId>org.glassfish.jersey</groupId>
    <artifactId>jersey-bom</artifactId>
    <version>2.2</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.2</version>
</dependency>

我是否需要添加对JSON的支持?

3 个答案:

答案 0 :(得分:2)

您是否阅读了JSON中专门讨论Users Guide的章节?最简单的方法是在MOXy上添加依赖项,JSON支持可以开箱即用(您无需显式注册模块提供的功能以使其正常工作而不是泽西岛的其他JSON模块:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.2</version>
</dependency>

无论如何,Jersey提供了更多可以帮助您处理JSON媒体类型的模块:

答案 1 :(得分:1)

似乎德鲁在评论中走在了正确的轨道上。但答案(至少对泽西2.2 +杰克逊来说)是一个更新的提供者

<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>

使用此功能无需配置。将其与原始问题中的两个依赖项一起使用,即可开展业务。

答案 2 :(得分:0)

JSON开始为我工作只有两个依赖:

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.2.3</version>
    </dependency>