spring 将JSON响应Map到不同类型

rsl1atfo  于 2023-02-07  发布在  Spring
关注(0)|答案(1)|浏览(126)

我使用的是Spring 2.6,我们通过以下方式发出GET请求
restTemplate.exchange(url, HttpMethod.GET, httpEntity, ResponseType.class).getBody();
JSON响应有两种类型:
第一次:

public class ResponseType {

    private String data;

}

第二名:

public class ResponseType {

    private Subclass data;

}

public class Subclass {

    private String classId;
    private String detail;

}

在第一个版本中,我只得到一个子类资源的引用链接。如果URL包含一个"resolve"标志,那么引用链接在第一个请求中就已经被扩展了。classId还指定了它是什么类型的类("a.b.c"或"x.y. z")
JSON没有问题,但是如何在Java中获得Map呢?
JSON响应如下所示:

{  
 "data": "abskasdkjhkjsahfkajdf-linkToResource" 
}

或者这个:

{  
  "data": {
   "classId": "a.b.c",    
   "detail": "some data"   
  } 
}
zengzsys

zengzsys1#

响应实体应为字符串。
然后在测试字符串是否包含“classId”后序列化到POJO
类似于这样。注意,SuperType由两个ResponseType扩展,现在重命名为ResponseType1和ResponseType2。

ObjectMapper objectMapper = new ObjectMapper();

String json = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class).getBody();

SuperType responseContent = null;

if(generalResponse.contains("classId")) {
    responseContent = objectMapper.readValue(json, ResponseType2.class);
} else{
    responseContent = objectMapper.readValue(json, ResponseType1.class);
}

相关问题