현재 ApiResponse 객체에 JSON 데이터를 문자열로 반환하고 있어서, 이때 문자열 내의 특수 문자(예: " 등)가 이스케이프 처리되어 \ 문자가 붙은 상태로 출력되고 있습니다.
이를 해결하기 위해서는 JSON 데이터를 파싱하여 객체로 변환한 후, 그 객체를 다시 JSON 문자열로 변환하여 반환하거나, 이스케이프 문자가 없는 형태로 바로 반환할 수 있도록 수정해야 합니다.
{
"status": "success",
"data": "{\"events\":[{\"id\":\"66d0baae4106f82fb1036f84_20221028T030000Z\",\"title\":\"일정 제목\",\"type\":\"USER\",\"calendar_id\":\"primary\",\"is_recur_event\":true,\"is_host\":true,\"time\":{\"start_at\":\"2022-10-28T03:00:00Z\",\"end_at\":\"2022-10-28T06:00:00Z\",\"time_zone\":\"Asia/Seoul\",\"all_day\":false,\"lunar\":false},\"color\":\"RED\"},{\"id\":\"66d0baae4106f82fb1036f84_20221029T030000Z\",\"title\":\"일정 제목\",\"type\":\"USER\",\"calendar_id\":\"primary\",\"is_recur_event\":true,\"is_host\":true,\"time\":{\"start_at\":\"2022-10-29T03:00:00Z\",\"end_at\":\"2022-10-29T06:00:00Z\",\"time_zone\":\"Asia/Seoul\",\"all_day\":false,\"lunar\":false},\"color\":\"RED\"},{\"id\":\"66d0ab2cb0c1f80cc89c4107_20221027T030000Z\",\"title\":\"27일만 있도록 수정 가능한가??\",\"type\":\"USER\",\"calendar_id\":\"primary\",\"is_recur_event\":true,\"is_host\":true,\"time\":{\"start_at\":\"2022-10-27T03:00:00Z\",\"end_at\":\"2022-10-27T06:00:00Z\",\"time_zone\":\"Asia/Seoul\",\"all_day\":false,\"lunar\":false},\"color\":\"RED\"},{\"id\":\"66d69947ff15e01682df6026_20221027T030000Z\",\"title\":\"일정 제목\",\"type\":\"USER\",\"calendar_id\":\"primary\",\"is_recur_event\":true,\"is_host\":true,\"time\":{\"start_at\":\"2022-10-27T03:00:00Z\",\"end_at\":\"2022-10-27T06:00:00Z\",\"time_zone\":\"Asia/Seoul\",\"all_day\":false,\"lunar\":false},\"color\":\"RED\"},{\"id\":\"66d69947ff15e01682df6026_20221028T030000Z\",\"title\":\"일정 제목\",\"type\":\"USER\",\"calendar_id\":\"primary\",\"is_recur_event\":true,\"is_host\":true,\"time\":{\"start_at\":\"2022-10-28T03:00:00Z\",\"end_at\":\"2022-10-28T06:00:00Z\",\"time_zone\":\"Asia/Seoul\",\"all_day\":false,\"lunar\":false},\"color\":\"RED\"},{\"id\":\"66d69947ff15e01682df6026_20221029T030000Z\",\"title\":\"일정 제목\",\"type\":\"USER\",\"calendar_id\":\"primary\",\"is_recur_event\":true,\"is_host\":true,\"time\":{\"start_at\":\"2022-10-29T03:00:00Z\",\"end_at\":\"2022-10-29T06:00:00Z\",\"time_zone\":\"Asia/Seoul\",\"all_day\":false,\"lunar\":false},\"color\":\"RED\"}],\"has_next\":false}",
"message": "톡캘린더 목록 조회 되었습니다."
}
이 문제는 ApiResponse 객체가 데이터를 JSON으로 직렬화할 때 이스케이프 처리가 이루어지고 있기 때문일 수 있습니다. 이를 해결하기 위해 JSON 데이터를 ApiResponse의 data 필드에 String이 아닌 Map 또는 Object 형태로 저장해 보세요. 이렇게 하면 Jackson이 JSON 데이터를 이스케이프하지 않고 제대로 직렬화할 수 있습니다.
// JSON 문자열을 Map으로 변환하여 이스케이프 문자를 제거
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> responseData = objectMapper.readValue(response.getBody(), Map.class);
// Map을 그대로 반환하여 JSON 형태로 직렬화되도록 설정
코드 설명
- JSON 문자열을 Map<String, Object>로 변환:
- ObjectMapper를 사용하여 response.getBody()에서 받은 JSON 문자열을 Map<String, Object>로 변환합니다. 이 과정에서 이스케이프 문자가 제거됩니다.
- 변환된 Map을 그대로 ApiResponse의 data 필드에 저장:
- JSON 문자열을 다시 String으로 변환하지 않고, Map 객체 자체를 ApiResponse의 data 필드에 저장합니다. 이 경우 Jackson이 자동으로 객체를 직렬화하면서 이스케이프 문자가 없는 올바른 JSON 형식으로 반환할 것입니다.
이 방법을 사용하면 JSON 응답 내에 \ 문자가 더 이상 포함되지 않게 됩니다.
'개발 Error' 카테고리의 다른 글
Request requested invalid session id (0) | 2024.09.11 |
---|---|
Error parsing HTTP request header (0) | 2024.09.11 |
[IntelliJ] cannot resolve symbol 에러 (0) | 2024.09.04 |
카카오 톡캘린더 API 가져오기 _ 추가 항목 동의 에러 (0) | 2024.08.29 |
카카오 톡캘린더 API 가져오기 _ 접근 권환 동의 에러 (1) | 2024.08.29 |