728x90
반응형
❓ 언제 발생하나요?
- 클라이언트가 잘못된 JSON 요청을 보냈을 때 발생합니다.
- 즉, 역직렬화에 실패했을 때 발생합니다.
예를 들어 다음과 같이 필드 타입이 잘못된 JSON을 보냈다고 가정합시다:
POST /users
Content-Type: application/json
{
"name": "Kim",
"age": "스무살" ← 정수여야 하는데 문자열!
}
📛 예외 메시지 예시
Resolved [org.springframework.http.converter.HttpMessageNotReadableException:
JSON parse error: Cannot deserialize value of type `int` from String "스무살"]
📌 대처 방안: @ControllerAdvice + 사용자 친화적인 에러 메시지 반환
1️⃣ 사용자 정의 예외 핸들러 구현
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity<ErrorResponse> handleBadRequest(HttpMessageNotReadableException ex) {
String message = "요청 본문 형식이 잘못되었습니다. 숫자 필드에 문자열이 들어갔는지 확인하세요.";
return ResponseEntity
.badRequest()
.body(new ErrorResponse("INVALID_JSON", message));
}
}
2️⃣ 에러 응답 객체 정의
public record ErrorResponse(String code, String message) {}
✅ 결과: 사용자는 명확하고 한글로 된 안내를 받게 됨
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"code": "INVALID_JSON",
"message": "요청 본문 형식이 잘못되었습니다. 숫자 필드에 문자열이 들어갔는지 확인하세요."
}
🔧 확장 팁
기능구현 방법
에러 코드 분류 | enum ErrorCode { INVALID_JSON, VALIDATION_FAILED, ... } |
로깅 추가 | log.warn("역직렬화 실패: {}", ex.getMessage()) 등으로 운영 추적 |
다국어 메시지 | MessageSource로 다국어 처리 가능 (messages.properties) |
📦 정리
항목내용
예외 | HttpMessageNotReadableException |
원인 | JSON → Java 객체 역직렬화 실패 |
대표 상황 | 숫자 타입 필드에 문자열 전달 등 |
대처 방안 | @ControllerAdvice를 통해 예외 잡고, 사용자 친화적 메시지 반환 |
결과 | UX 개선 + 운영자 디버깅 용이 |
728x90
반응형
'Warning' 카테고리의 다른 글
예외: HttpClientErrorException (0) | 2025.06.16 |
---|---|
예외 시나리오: HttpMediaTypeNotSupportedException (0) | 2025.06.16 |
예외 시나리오: MethodArgumentNotValidException (0) | 2025.06.16 |
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html" (1) | 2025.05.08 |
A listener indicated an asynchronous response by returning true (0) | 2025.05.08 |