딸기스무디

[Spring] "java.util.LinkedHashMap cannot be cast to Class" 해결 본문

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);

 

Comments