【发布时间】:2020-07-23 05:38:12
【问题描述】:
我有以下 POJO:
class TestPojo {
private Long testId = null;
private String testString = null;
private boolean testBoolean = false;
private Float testFloat = null;
private int testInt = 0;
private Collection<String> testCollection = new TreeSet();
Long getTestId() {
return testId;
}
void setTestId(Long testId) {
this.testId = testId;
}
String getTestString() {
return testString;
}
void setTestString(String testString) {
this.testString = testString;
}
boolean getTestBoolean() {
return testBoolean;
}
void setTestBoolean(boolean testBoolean) {
this.testBoolean = testBoolean;
}
Float getTestFloat() {
return testFloat;
}
void setTestFloat(Float testFloat) {
this.testFloat = testFloat;
}
int getTestInt() {
return testInt;
}
void setTestInt(int testInt) {
this.testInt = testInt;
}
Collection<String> getTestCollection() {
return testCollection;
}
void setTestCollection(Collection<String> testCollection) {
this.testCollection = testCollection;
}
}
我有两个 REST API 响应,一个返回 JSON 格式的单个 TestPojo 实例:
{
"testId": 1,
"testString": "testStringA",
"testBoolean": false,
"testFloat": 1.0,
"testInt": 1,
"testCollection": [
"testCollectionA",
"testCollectionB"
]
}
另一个 REST API 响应返回多个 TestPojo 的映射:
{
"TestPojoA": {
"testId": 1,
"testString": "testStringA",
"testBoolean": false,
"testFloat": 1.0,
"testInt": 1,
"testCollection": [
"testCollectionA",
"testCollectionB"
]
},
"TestPojoB": {
"testId": 2,
"testString": "testStringB",
"testBoolean": true,
"testFloat": 1.1,
"testInt": 2,
"testCollection": [
"testCollectionC",
"testCollectionB"
]
}
}
带有 MappingJackson2HttpMessageConverter 的我的 Rest 模板正确返回第一个 JSON 的 POJO:
RestTemplate restTemplate = new RestTemplate();
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);
TestPojo testPojo = restTemplate.getForObject("http://127.0.0.1:8081/test/getPojoInstance", TestPojo.class);
但是,我无法让地图中的 POJO 正确转换?我尝试了各种方法,我认为以下方法可行,但这只是返回一个包含两个字符串值而不是 String 和 POJO 的映射:
RestTemplate restTemplate = new RestTemplate();
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);
Map<String, TestPojo> testPojoMap = restTemplate.getForObject("http://127.0.0.1:8081/test/getPojoMap", Map<String, TestPojo>.class);
我知道我可以在收到响应后将我的地图中的字符串值转换为 TestPojo,但我只是好奇这是不是我一开始做的不对?
【问题讨论】:
标签: java rest spring-mvc jackson