[Spring Boot] java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class org.json.simple.JSONObject 해결 방법

sy·2023년 1월 4일
0
post-custom-banner

📌 오류 내용

java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class org.json.simple.JSONObject (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; org.json.simple.JSONObject is in unnamed module of loader 'app')

Object를 바로 JSONObject로 변경하려고 하니 위와 같은 오류가 났다.

내 코드

RequestEntity<Map<String, String>> requestEntity = RequestEntity
                .post(url)
                .contentType(MediaType.APPLICATION_JSON)
                .body(req);
                
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<JSONObject> response = restTemplate.exchange(requestEntity, JSONObject.class);

// 여기서부터 오류 
JSONObject jsonObject = (JSONObject) response.get("response");
System.out.println(jsonObject.get("status"));

수정한 코드

JSONParser jsonParser = new JSONParser();
ObjectMapper mapper = new ObjectMapper();

try {
	String jsonStr = mapper.writeValueAsString(response.getBody().get("response"));

	JSONObject jsonObject = (JSONObject) jsonParser.parse(jsonStr);
	System.out.println(jsonObject.get("status"));
        
} catch (Exception e) {
	e.printStackTrace();
}

오류가 난 이유

JSONObject로 변환하기 위해서는 {"response": {"status": "fail"} 이런식으로 쌍따옴표가 있어야하는데 Object에서는 쌍따옴표가 빠진 상태로 {status=fail} 이렇게 리턴을 하기 때문에 JSONObject로 변환할 수 없었다. ObjectMapper와 JSONParser를 이용하여 쌍따옴표를 만들어주고 json으로 변환하여 JSONObject로 만들었다.

post-custom-banner

0개의 댓글