设计您的 POJO 以与 Jackson 一起工作
如果您愿意使用 Jackson 作为 JSON 解析器,您可以拥有以下内容:
public class RequestContent {
@JsonProperty("Name")
private String name;
@JsonProperty("MyMap")
private List<KeyValuePair> map;
// Getters and setters ommited
}
public class KeyValuePair {
private String key;
private String value;
// Getters and setters ommited
}
使用 Jackson 解析 JSON
使用 Jersey 和 Jackson,您无需使用以下命令解析 JSON 字符串ObjectMapper
, 如下所示:
String json = "{\"Name\":\"TestName\",\"MyMap\":[{\"key\":\"Color\",\"value\":\"red\"},{\"key\":\"distance\",\"value\":\"long\"},{\"key\":\"Size\",\"value\":\"large\"}]}";";
ObjectMapper mapper = new ObjectMapper();
RequestContent requestContent = mapper.readValue(json, RequestContent.class);
只需确保您的资源方法如下所示,然后让杰克逊的MessageBodyReader http://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/MessageBodyReader.html为您做这项工作:
@POST
@Path("/somePath")
@Consumes(MediaType.APPLICATION_JSON)
public Response generateDetails(RequestContent requestContent) {
...
}
JSON 解析将由JacksonJsonProvider https://github.com/FasterXML/jackson-jaxrs-json-provider/blob/master/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java类,它实现了MessageBodyReader http://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/MessageBodyReader.html.
杰克逊依赖
要使用 Jackson 2.x 作为 JSON 提供程序,您需要添加jersey-media-json-jackson https://jersey.java.net/project-info/2.23.1/jersey/project/jersey-media-json-jackson/dependencies.html模块到你的pom.xml
file:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.23.1</version>
</dependency>
要使用 Jackson 1.x,它看起来像:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson1</artifactId>
<version>2.23.1</version>
</dependency>
如果您不使用 Maven,请确保拥有所有需要的依赖项(请参阅jersey-media-json-jackson https://jersey.java.net/project-info/2.23.1/jersey/project/jersey-media-json-jackson/dependencies.html or jersey-media-json-jackson1 https://jersey.java.net/project-info/2.23.1/jersey/project/jersey-media-json-jackson1/dependencies.html)在类路径上。
为了使用 Jackson 作为您的 JSON 提供程序,您需要注册JacksonFeature https://jersey.java.net/apidocs/2.23.1/jersey/org/glassfish/jersey/jackson/JacksonFeature.html (or Jackson1Feature https://jersey.java.net/apidocs/2.23.1/jersey/org/glassfish/jersey/jackson1/Jackson1Feature.html对于 Jackson 1.x) 在你的Application https://jersey.java.net/apidocs/2.23.1/jersey/javax/ws/rs/core/Application.html/ResourceConfig https://jersey.java.net/apidocs/2.23.1/jersey/org/glassfish/jersey/server/ResourceConfig.html子类。
欲了解更多详情,请查看球衣文档 https://jersey.java.net/documentation/latest/media.html关于对常见媒体类型表示的支持。
根据您的需求变更进行更新
改变RequestContent
类如下:
public class RequestContent {
@JsonProperty("Name")
private String name;
@JsonProperty("MyMap")
private List<List<KeyValuePair>> map;
// Getters and setters ommited
}
然后使用上面显示的方法之一解析 JSON。