반응형
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과 빈 문자열을 점검하는 습관을 들이는 것이 시스템의 안정성과 사용자 경험 모두에 도움이 된다.
반응형
'Application Servers & Java' 카테고리의 다른 글
| WildFly WFLYSRV0059 경고 해결 가이드: Class-Path 참조 오류 원인과 실전 대응법 (0) | 2025.05.21 |
|---|---|
| Class version is supported up to JDK 1.7 오류 해결 가이드 (0) | 2025.05.21 |
| JDBC-14002 오류 해결 가이드: Invalid argument type or value 예외 분석 (1) | 2025.05.21 |
| JDBC-590703 오류 해결법 – Unsupported data type 원인과 대처법 (0) | 2025.05.21 |
| JDBC-10005 오류 해결법: NOT NULL 제약 조건 위반 시 대처 방법 (1) | 2025.05.21 |