gpt4 book ai didi

java - 在 java REST 中解析 JSON 参数时出错

转载 作者:行者123 更新时间:2023-12-01 21:22:55 24 4
gpt4 key购买 nike

我最近升级了 REST API 以使用 jersey 2.x,现在我无法像以前那样检索 JSON 正文参数,这些方法根本不再被调用。我的猜测是我缺少将 JSON 解析为 java 对象的依赖项,但我不太确定需要添加什么,任何帮助表示赞赏。

pom.xml

<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.22</version>
</dependency>
</dependencies>

REST方法

@POST
@Path("/users/{userId}/friends")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response followUser(@PathParam("userId") Integer myUserId, FollowUserBean user) {}

FollowUserBean.java

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class FollowUserBean {
public Integer friendId;

public FollowUserBean() {}
}

最佳答案

您需要一个 JSON 提供程序

在撰写本文时,Jersey 2.x 与以下模块集成以提供 JSON 支持:

使用 jackson

请参阅下面使用 Jackson 作为 Jersey 2.x 的 JSON 提供程序所需的步骤:

添加 Jackson 模块依赖项

要使用 Jackson 2.x 作为 JSON 提供程序,您需要添加 jersey-media-json-jackson模块到您的 pom.xml 文件:

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25.1</version>
</dependency>

要使用 Jackson 1.x,它看起来像:

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson1</artifactId>
<version>2.25.1</version>
</dependency>

注册 Jackson 模块

除了添加上面提到的依赖之外,还需要注册JacksonFeature (或 Jackson1Feature 对于 Jackson 1.x)在您的 Application 中/ResourceConfig子类:

@ApplicationPath("/api")
public class MyApplication extends Application {

@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(JacksonFeature.class);
return classes;
}
}
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {

public MyApplication() {
register(JacksonFeature.class);
}
}

如果您没有Application/ResourceConfig子类,可以注册 JacksonFeature在您的 web.xml 部署描述符中。特定资源、提供程序和功能完全限定类名可以以逗号分隔值 jersey.config.server.provider.classnames 的形式提供。初始化参数。

<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
</init-param>

MessageBodyWriter jackson 提供的是 JacksonJsonProvider .

<小时/>

欲了解更多详情,请查看 Jersey documentation关于对常见媒体类型表示的支持。

关于java - 在 java REST 中解析 JSON 参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38865123/

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