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
반응형

+ Recent posts