请求实体并将其映射到 Java 类
考虑一下,例如,当您在 http://example.com/api/people/1 处执行 GET 请求时,您正在使用提供以下 JSON 的 REST API:
{
"name": "John Doe",
"age": 25
}
上面的JSON可以映射成一个Java类,定义如下:
public class Person {
private String name;
private Integer age;
// Constructor, getters and setters omitted
}
使用 JAX-RS 客户端 API,可以如下请求 JSON,将请求的实体映射到 Person 类:
Client client = ClientBuilder.newClient();
Person person = client.target("http://example.com/api")
.path("people").path("1")
.request(MediaType.APPLICATION_JSON)
.get(Person.class);
String name = person.getName();
Integer age = person.getAge();
JAX-RS 客户端 API 是 JAX-RS 2.0 规范的一部分,参考实现是 Jersey。
为了解析 JSON,Jersey 为多个框架提供了一组扩展模块,支持 JSON 处理和/或 JSON 到 Java 的绑定。 Jersey 支持 MOXy、JSON-P、Jackson 和 Jettison。更多详情,请查看documentation。
手动解析 JSON
如果由于某种原因需要手动解析请求的实体,可以将请求的实体存储在String:
Client client = ClientBuilder.newClient();
String json = client.target("http://example.com/api")
.path("people").path("1")
.request(MediaType.APPLICATION_JSON)
.get(String.class);
然后可以使用例如Jackson手动解析请求的实体:
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
String name = node.path("name").asText();
Integer age = node.path("age").asInt();
要手动解析 JSON,也可以考虑Gson。
替代方案
有关如何使用 Java 使用 REST API 的替代方法,请查看 this answer。