Java
[Spring] "java.util.LinkedHashMap cannot be cast to Class" 해결
strawberry-smoothie
2022. 6. 6. 14:00
아래 처럼 클래스의 멤버변수로 다른 클래스가 선언되는 상황에서 @RequestBody annotation을 사용한다고 가정해보자
// pojo
class data_A {
private String field1;
private String field2;
private data_B data_b;
}
class data_B{
private String field1;
}
//JSON
{
"field1" : "A12",
"field1" : "A13",
"data_b" : {
"field1" : "ab11"
}
}
// Controller
@GetMapping(value = "/api/user")
public external_message get_userid_from_telegramid(@RequestBody data_A recvdata){
/* ================ RECEIVE LOGGING ================ */
...
/* ================================================= */
data_B dataB = (data_B) recvdata.getdata_B();
data_A는 알아서 parsing되었지만 data_B의 값을 처리할 때 문제가 발생한다.
data_B dataB = (data_B) recvdata.getdata_B(); 부분에서 "java.util.LinkedHashMap cannot be cast to data_B"라는 java.lang.ClassCastException이 발생할 것이다.
직접 HashMap에 접근하여 값을 세팅해주는 방법도 있겟지만 이렇게 ObjectMapper를 사용하면
LinkedHashMap -> class로 편하게 변환할 수 있다.
ObjectMapper mapper = new ObjectMapper();
data_B _data_B = mapper.convertValue(recvdata.getdata_B(), data_B.class);
끝