[英]How to parse jsonObject and JsonArray for the same field in REST Response
我使用RestTemplate調用了一個api,讓我們假設/ getCompany
通常的回應如下:
"Organization":{
"name": "My Company",
"department": {
"id": "1",
"employee": [{
"id": "84",
"name": "abc"
},
{
"id": "85",
"name": "xyz"
}]
}
}
所以我解析如下:
ResponseEntity<Organization> company= new RestTemplate().exchange(new URI(companyUrl),HttpMethod.GET,request, Organization.class);
Organization comp= company.getBody();
Department dept= comp.getDepartment();
Employee[] emp = dept.getEmployees()
但有時在響應中,我還會得到以下json字符串:
"Organization":{
"name": "My Company",
"department": {
"id": "1",
"employee": {
"id": "84",
"name": "abc"
}
}
}
現在我得到以下異常:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of Employee[] out of START_OBJECT token
那么有什么辦法可以處理這兩種情況?
更新:-
根據評論添加以下代碼:
@Bean
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
return objectMapper;
}
@Bean
public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter(ObjectMapper objectMapper) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper);
return converter;
}
但是仍然得到同樣的例外。
謝謝,
注冊的objectMapper必須與ACCEPT_SINGLE_VALUE_AS_ARRAY參數一起使用。
達到此目的的最簡單方法可能是在帶有@Configuration
注釋的類中注冊正確初始化的ObjectMapper
和MappingJacksonHttpMessageConverter
:
@Bean
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(ACCEPT_SINGLE_VALUE_AS_ARRAY);
return objectMapper;
}
@Bean
public MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter(ObjectMapper objectMapper) {
MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
converter.setObjectMapper(objectMapper);
return converter;
}
另一種方法是將轉換器直接設置為restTemplate對象:
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(ACCEPT_SINGLE_VALUE_AS_ARRAY);
return objectMapper;
}
public MappingJackson2HttpMessageConverter httpConverter(ObjectMapper objectMapper) {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
public void restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(Arrays.asList(httpConverter(objectMapper())));
restTemplate.exchange(...);
}
JSON是一種JavaScript對象表示法。 JSON與javascript的語法相同。 在JSON中,數組值的類型必須為字符串,數組,數字,對象布爾值或null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.