从json发布请求中检索Java对象

时间:2019-10-14 11:42:06

标签: java json jersey

我正在使用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类都不相同。我怎样才能有效地做到这一点?

1 个答案:

答案 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
}
相关问题