(through reference chain: java.util.LinkedHashMap..
진짜 온갖 에러를 다 만나고 있다.
objectMapper.readValue(responseEntity.getBody(), CarPathJsonVo.class); // 여기서 발생
이것은 json의 형태가 [{"json":"test"}]와 같이 []로 묶여있는 탓인데 , 이는 CarPathJsonVo[].class 이렇게 [] 을 감싸주면 되더라
https://mkyong.com/java/jackson-convert-json-array-string-to-list/
ObjectMapper mapper = new ObjectMapper();
String json = "[{\"name\":\"mkyong\", \"age\":37}, {\"name\":\"fong\", \"age\":38}]";
// 1. convert JSON array to Array objects
Person[] pp1 = mapper.readValue(json, Person[].class);
// 2. convert JSON array to List of objects
List<Person> ppl2 = Arrays.asList(mapper.readValue(json, Person[].class));
// 시도한 흔적 남기기
String t = objectMapper.writeValueAsString(requestVo);
// 그럼 List 형식을 map으로 바꾸는 방법은?
// MultiValueMap을 사용할때의 형식 , https://jojoldu.tistory.com/478
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
Map<String, String> map = objectMapper.convertValue(dto, new TypeReference<Map<String, String>>() {});
params.setAll(map);
// Map<String, Object> 형태를 MultiValueMap<String, String> 로 바꾸는 방법 (없음.. List 형식이 있어서 안됨)
TypeReference<MultiValueMap<String,String>> typeRef = new TypeReference<MultiValueMap<String,String>>() {};
MultiValueMap<String, String> map = objectMapper.convertValue(requestVo, typeRef);
Map<String, String> convertMap = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));
MultiValueMap<String, String> maps = objectMapper.convertValue(convertMap, typeRef);
// arrayList로 변환하는 방법????
String template = responseEntity.getBody();
List<CarPathJsonVo> consultants = Arrays.asList(
objectMapper.readValue(template, CarPathJsonVo.class)
);
return consultants;
결국 해결한 방법들
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
// disable SerializationFeature.FAIL_ON_EMPTY_BEANS 에러 발생해서 넣어줌
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
String searchUrl = carPathUrl + "?key=" + carPathApiKey;
Map<String, Object> map = objectMapper.convertValue(requestVo, new TypeReference<Map<String, Object>>() {});
try {
ResponseEntity<String> responseEntity = restClientUtil.connectUrl(searchUrl, HttpMethod.POST, headers, map);
return objectMapper.readValue(responseEntity.getBody(), CarPathJsonVo[].class);
} catch (Exception e) {
log.error("Exception", e);
throw new ApiException(ResultCode.INNER_FAIL);
}