응답의 데이터 유형이 일치하지 않는 API를 가져 오는 동안 RestTemplate을 사용하는 데 문제가 있습니다.
API 자체를 변경하지 않고 작동하도록하는 방법이 있는지 궁금합니다 (API는 내 것이 아니므로 실제로 변경할 수 없습니다)
나는 객체 List을 가져올 때 상황이 있으며 비어 있지 않은 경우 다음과 같은 형식입니다.
{
"orders": [
{
...
}
]
}
그러나 제한 매개 변수 또는 0 결과를 반환하는 다른 것으로이 API를 호출하면 응답 형식은 다음과 같습니다.
[]
직렬화 / 역 직렬화에 대한 개체가 있고 그 안에 주문 List이 있으므로 0 개 이상의 결과를 얻을 때 작동합니다. 스택에 이미 솔루션이 있는지 모르겠습니다 (아직 찾지 못했습니다).
이런 종류의 문제를 처리하는 방법에 대한 아이디어가 있습니까?
btw. 나는 이미 해당 API에 대한 github에 문제를 만들었지 만 고칠 때까지 어떻게 든 작동하고 싶습니다 (모든 해킹 감사합니다 :))
편집 : HTTP 상태 코드는 항상 200입니다.
사용자 정의 된 objectmapper 를 사용하여이를 달성 할 수 있습니다.
public ObjectMapper createObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
return objectMapper;
}
사용자 정의 ObjectMapper를 MappingJackson2HttpMessageConverter에서 사용할 수 있도록하려면 새 MappingJackson2HttpMessageConverter를 만들고 ObjectMapper 인스턴스를 전달하면됩니다.
private MappingJackson2HttpMessageConverter createMappingJacksonHttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(createObjectMapper());
return converter;
}
그런 다음 RestTemplate을 만들고 사용자 지정 MappingJackson2HttpMessageConverter를 메시지 변환기 List에 추가 할 수 있습니다.
@Bean
public RestTemplate createRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(0,
createMappingJacksonHttpMessageConverter());
}
그리고 이제 이것을 사용 restTemplate
하여 단일 객체를 다음과 같이 읽습니다.List
List<Model> models = restTemplate.exchange(uri,POST,entity,
new ParameterizedTypeReference<List<Model>>>(){});