我最近将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() {}
}
在撰写本文时,Jersey 2.x与以下模块集成以提供JSON支持:
请参阅以下将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
杰克逊提供的是JacksonJsonProvider
。
有关更多详细信息,请参阅Jersey
文档中有关常见媒体类型表示形式的支持。
问题内容: 我有一个,尝试检索并解析它,但出现此错误: 这是我的功能: 怎么了?我花了两天时间来解决这个问题。有时我会遇到空值,但我不知道如何使用它们。 问题答案: 添加与null测试不同的简单方法。 那你还有问题吗?
我尝试了以下get方法:swift JSON登录REST with post和get响应示例 代码: 我得到了一个输出:试图将数据转换为JSON时出错… 服务2的描述是:这是对服务2的描述。这是对服务2的描述这是对服务2的描述。
我尝试了不同的方法在Android中解析JSON文件,但在打印出来时出现了错误。 这是我的整个JSON文件: 以下是我为使其正常工作而实现的代码: 这是onPostExecute方法: 我已经从这个网站的帮助来布局我的功能:https://www.androidhive.info/2012/01/android-json-parsing-tutorial/
问题内容: 我有提供URL作为参数的REST客户端。但是我的云REST基础架构仅接受JSON格式。 有没有办法在Java中将URL参数转换(解析)为JSON格式? URL参数示例: 转换为JSON格式,例如: 问题答案: 解决方案 没有开箱即用的解决方案,因此开发一种解决方法最实用。 这是一个参数到JSON的转换器方法: 结果 方法输入: 方法返回输出:
问题内容: 我是Jquery,Ajax和JSON的新手。我在解析Json数据时遇到问题。我在Stackoverflow上遇到了很多问题 解析HTML表的JSON对象 访问/处理(嵌套的)对象,数组或JSON 在JavaScript中解析JSON? 如何在JQuery中解析此JSON对象? 还有很多… 我仍然无法解析Json数据。 我的Jquery看起来像: 我已经尝试了所有组合来解析此数据,但是j
问题内容: 我正在使用一个API,该API返回如下所示的JSON 在Swift中,我使用两个函数来获取并解析JSON 然后我用 可以很好地解析JSON。当我打印出 我得到了数组的所有内容。但是,我无法访问每个单独的索引。我很肯定这是一个数组,因为我之间 返回正确的长度。但是,如果我尝试通过使用访问单个索引 XCode关闭语法高亮显示并给我以下信息: 并且代码将无法编译。 这是XCode 6的错误,