Application Servers & Java

JsonMappingException - No content to map 오류 해결법

midworker 2025. 5. 21. 22:38
반응형

Jackson에서 No content to map 오류가 발생하는 이유와 실제 예제, 해결 방법까지 자세히 정리했습니다.


JsonMappingException - No content to map 오류 해결법

Jackson을 사용하다 보면 No content to map due to end-of-input이라는 오류를 마주치는 경우가 있다. 이 오류는 JSON 문자열이 비어 있거나 null일 때 발생한다. 특히 외부 API를 연동하거나 클라이언트에서 데이터를 받을 때 본문이 비어 있는 경우 자주 발생한다.

오류 메시지 예시

com.fasterxml.jackson.databind.JsonMappingException: 
No content to map due to end-of-input
 at [Source: (String)""; line: 1, column: 0]

이 메시지는 JSON 문자열이 아예 존재하지 않거나, 단순 공백 문자열이 전달됐음을 의미한다. Jackson에서는 이를 객체로 역직렬화할 수 없기 때문에 예외를 발생시킨다.

주요 원인 분석

원인 구분 상세 설명
빈 문자열 전달 "" 또는 null이 JSON으로 넘어오는 경우
HTTP 요청 본문 없음 Spring 등에서 @RequestBody를 사용했으나, 클라이언트가 데이터를 보내지 않음
외부 API 응답 JSON이 공백 REST 호출 결과가 비어 있음에도 검증 없이 처리하려 함

대표적인 예제 코드

ObjectMapper mapper = new ObjectMapper();
String json = ""; // 또는 null
MyDto dto = mapper.readValue(json, MyDto.class); // 예외 발생

→ JSON이 비어 있으므로 JsonMappingException이 발생하게 된다.

해결 방법 3가지

1. null 또는 빈 문자열 검증

if (json != null && !json.trim().isEmpty()) {
    MyDto dto = mapper.readValue(json, MyDto.class);
} else {
    // 기본값 처리 또는 사용자 알림
}

입력값 검증을 사전에 거치는 것이 가장 기본적이고 중요한 방법이다.

2. Spring에서 @RequestBody 처리 시

@PostMapping("/submit")
public ResponseEntity<?> submit(@RequestBody(required = false) MyDto dto) {
    if (dto == null) {
        return ResponseEntity.badRequest().body("요청 본문이 비어 있습니다.");
    }
    ...
}

required = false 옵션을 사용하면 본문이 비어 있어도 400 오류가 발생하지 않으며, null 체크 후 별도 처리할 수 있다.

3. 외부 API 응답 체크

String response = restTemplate.getForObject(url, String.class);
if (response != null && !response.isEmpty()) {
    MyDto dto = objectMapper.readValue(response, MyDto.class);
}

외부 호출 결과도 항상 비어 있지 않은지 사전 검증하는 것이 중요하다.

실무 팁

  • 단위 테스트 작성 시 null이나 빈 JSON에 대한 케이스를 반드시 포함해야 한다.
  • 공통 유틸 클래스를 만들어 JSON 역직렬화 시 빈값 검사를 자동화하는 것도 좋은 방법이다.
  • 에러 메시지를 사용자에게 직접 노출하지 말고, 로그에 남기거나 개발자용 디버깅 정보로만 활용해야 한다.

결론

No content to map due to end-of-input 오류는 JSON 문자열이 아예 없을 때 발생하는 전형적인 예외다. 모든 JSON 역직렬화 전에 null과 빈 문자열을 점검하는 습관을 들이는 것이 시스템의 안정성과 사용자 경험 모두에 도움이 된다.


반응형