我正在使用Java和jax-rs开发一个宁静的Web应用程序。在服务器端,我必须接受客户端使用POST方法给出的Json类型请求。
@POST
@Path("/Request")
@Consumes(MediaType.APPLICATION_JSON)
public String process(SMessage message) throws Exception {
message.getHeader();
message.getBody();
}
json对象具有两个复合字段,如下所示。
{
"header": {
"serviceType": "A"
},
"body": {
"id": "1",
"name": "abc"
}
}
基于“标题”字段中指定的serviceType,主体中的参数将有所不同。我需要将此主体字段映射到Java POJO类。对于所有请求,POJO类都不相同。我怎样才能有效地做到这一点?
答案 0 :(得分:1)
如果您将Jackson
用作JSON解析器,则一种简单的方法是将body
声明为JsonNode
来处理动态密钥,如下所示:
class MyResponse {
private MyHeader header;
private JsonNode body;
//general getters and setters
}
我假设您已经有header
的POJO,例如:
class MyHeader {
private String serviceType;
//general getters and setters
}
最后,让我们验证一下它是否有效:
String responseStr = "{\"header\": {\"serviceType\": \"A\"},\"body\": {\"id\": \"1\",\"name\": \"abc\"}}";
ObjectMapper mapper = new ObjectMapper();
MyResponse myResponse = mapper.readValue(responseStr, MyResponse.class);
System.out.println(myResponse.getBody().get("name").asText());
控制台输出:
abc
解决此问题的另一种方法是使用Map
,而其他所有操作都相同:
class MyResponse {
private MyHeader header;
private Map<String, Object> body;
//general getters and setters
}