Java Jersey 2.17:如何避免Jersey服务器中的MessageBodyWriter错误?

Java Jersey 2.17:如何避免Jersey服务器中的MessageBodyWriter错误?,java,json,jersey,jax-rs,Java,Json,Jersey,Jax Rs,我正在尝试编写一个简单的Jersey服务器应用程序。我的代码只有在使用XML时才能正常工作。但当我在JSON中请求结果时,我得到以下错误: org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type={application/json, q=1000}, type=

我正在尝试编写一个简单的Jersey服务器应用程序。我的代码只有在使用XML时才能正常工作。但当我在JSON中请求结果时,我得到以下错误:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type={application/json, q=1000}, type=class il.zukermandl.jersey.demo.model.User, genericType=class il.zukermandl.jersey.demo.model.User.
这是我的简单Java代码

@Path("/users")
public class UserService {
    @GET
    @Produces({APPLICATION_JSON, APPLICATION_XML})
    public Response getUser() {        
        return ok(new User()).build();
    }
}
我对实体使用JAXB注释

@XmlRootElement(name = "user")
@XmlType(propOrder = {"id", "name", "age"})
public class User {
    private Long id;
    private String name;
    private Integer age;
    // getters,setters and ctrs were omitted
}
我的配置类

public class AppConfig extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> resources = new HashSet<Class<?>>();
        resources.add(il.zukermandl.jersey.demo.service.UserService.class);
        return resources;
    }
}
我认为主要问题在我的
pom.xml
文件中。就是这样

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.17</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.17</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.3.2</version>
        </dependency>            
    </dependencies>

为了防止其他人遇到同样的问题,我通过添加

shadowJar {
    mergeServiceFiles()
}

build.gradle
。看起来插件
id“com.github.johnrengelman.shadow”版本“4.0.3”
在没有它的情况下进行了错误的阴影处理。

是的,我无法重现这个问题。你提供的东西对我来说很好。但是有一件事需要提到的是它没有使用的
AppConfig
类。这不是问题,因为您已经在扫描包了。此外,Jackson提供程序应该是自动发现的,因此需要配置任何内容。我不明白为什么不会,但我会在将其部署到Tomcat时检查
jersey media json jackson
jar是否在webapp的库中。这是我能看到它不起作用的唯一方法,而您对
pom.xml
的担心也不是问题。我唯一要解决的是去掉所有Jackson依赖项,除了
jersey media json Jackson
。泽西岛的媒体依赖性已经吸引了他们。同样,这不是问题,只是要彻底:-)您可以尝试显式注册JacksonFeature,看看会发生什么。将init参数添加到jersey serlvet
jersey.config.server.provider.classnames
-value
org.glassfish.jersey.jackson.JacksonFeature
当我将类名添加到
web.xml
时,我收到错误:
30-Mar-2015 21:24:53.827严重[http-nio-7777-exec-7]null MessageBodyWriter找不到媒体类型={application/json,q=1000},type=class-il.zukermandl.jersey.demo.model.User,genericType=class-il.zukermandl.jersey.demo.model.User.
这是同样的错误。就像我说的,我无法重现这个问题。这就是你当前项目中的所有内容吗?上面的内容。因为只要有了所有内容,它就可以正常工作。
WEB-INF
    ├── classes
    │   ├── il
    │   │   └── zukermandl
    │   │       └── jersey
    │   │           └── demo
    │   │               ├── AppConfig.class
    │   │               ├── model
    │   │               │   └── User.class
    │   │               └── service
    │   │                   └── UserService.class
    │   └── misc.txt
    ├── lib
    │   ├── aopalliance-repackaged-2.4.0-b10.jar
    │   ├── hk2-api-2.4.0-b10.jar
    │   ├── hk2-locator-2.4.0-b10.jar
    │   ├── hk2-utils-2.4.0-b10.jar
    │   ├── javassist-3.18.1-GA.jar
    │   ├── javax.annotation-api-1.2.jar
    │   ├── javax.inject-2.4.0-b10.jar
    │   ├── javax.ws.rs-api-2.0.1.jar
    │   ├── jersey-client-2.17.jar
    │   ├── jersey-common-2.17.jar
    │   ├── jersey-container-servlet-2.17.jar
    │   ├── jersey-container-servlet-core-2.17.jar
    │   ├── jersey-guava-2.17.jar
    │   ├── jersey-media-jaxb-2.17.jar
    │   ├── jersey-server-2.17.jar
    │   ├── osgi-resource-locator-1.0.1.jar
    │   └── validation-api-1.1.0.Final.jar
    └── web.xml
shadowJar {
    mergeServiceFiles()
}