gpt4 book ai didi

java - Jersey 2.17 : How to avoid MessageBodyWriter error in Jersey Server?

转载 作者:太空宇宙 更新时间:2023-11-04 14:00:21 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 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;
}
}

web.xml描述符。

    <servlet>
<servlet-name>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>il.zukermandl.jersey.demo</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Application</servlet-name>
<url-pattern>/rest_v1/*</url-pattern>
</servlet-mapping>

我认为主要问题出在我的 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>

我使用 Tomcat 8.0.9 来运行我的代码。有什么想法如何向此应用程序添加 JSON 支持吗?

UPD

这是我的项目的结构。

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()
}

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

关于java - Jersey 2.17 : How to avoid MessageBodyWriter error in Jersey Server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com