从 json post 请求中检索 Java 对象

Retrieving Java Objects from a json post request

我正在使用 java 和 jax-rs 开发 restful 网络应用程序。在服务器端,我必须接受客户端使用 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"
  }
}

根据Header字段中指定的serviceType,body中的参数会有所不同。我需要将此正文字段映射到 java POJO class。 POJO class 并非对所有请求都相同。我怎样才能有效地做到这一点?

如果您使用 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
}