복붙노트

[SPRING] Jackson - 400 잘못된 요청 로깅을 사용하는 Spring REST

SPRING

Jackson - 400 잘못된 요청 로깅을 사용하는 Spring REST

Jackson과 JSON을 사용하여 Spring REST를 설정하고 모든 것이 작동한다.

그러나 나는 의도적으로 400-Bad Request를 초래 한 메시지 구조에 오류를 도입했다. 그러나 서버에 로그 출력이 없습니다. 내가 기대하는 오류는 "Jackson unknown property exception"또는 무엇이든 잡히고 클라이언트에 400 오류가 전송되었지만 서버에 예외 로그가 표시되지 않는 것과 같은 오류입니다.

나는 서버의 모든 것을 명확하게 디버그하고 싶지 않지만 Spring 네트워크 레벨 예외를 명확하게 오류라고 분류하고 싶다.

이 스위치를 켜는 올바른 방법은 무엇입니까?

감사!

해결법

  1. ==============================

    1.

    @ExceptionHandler
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void handle(HttpMessageNotReadableException e) {
        logger.warn("Returning HTTP 400 Bad Request", e);
    }
    
  2. ==============================

    2.@ Jukka의 답변을 바탕으로 @ControllerAdvice (Spring 3.2에서 소개)를 사용하여 모든 컨트롤러에서 전역 적으로이 기능을 활성화 할 수 있습니다. 그것은 당신의 끝에 약간의 코드가 필요하지만, 내 경험에 당신은 일반적으로 어쨌든 전역 오류 처리 구성을 필요 결국이 중단 점을 설정할 수 있습니다 / 쉽게 문제를 검사합니다.

    @ Jukka의 답변을 바탕으로 @ControllerAdvice (Spring 3.2에서 소개)를 사용하여 모든 컨트롤러에서 전역 적으로이 기능을 활성화 할 수 있습니다. 그것은 당신의 끝에 약간의 코드가 필요하지만, 내 경험에 당신은 일반적으로 어쨌든 전역 오류 처리 구성을 필요 결국이 중단 점을 설정할 수 있습니다 / 쉽게 문제를 검사합니다.

    예를 들면 다음과 같습니다.

    @ControllerAdvice
    public class ControllerConfig {
    
        @ExceptionHandler
        @ResponseStatus(HttpStatus.BAD_REQUEST)
        public void handle(HttpMessageNotReadableException e) {
            log.warn("Returning HTTP 400 Bad Request", e);
            throw e;
        }
    }
    
  3. ==============================

    3.다른 사람이이 문제에 걸린 경우, 다음은 Spring Boot 2 / Spring 5에서 저에게 도움이되었고 코드 변경을 요구하지 않았습니다.

    다른 사람이이 문제에 걸린 경우, 다음은 Spring Boot 2 / Spring 5에서 저에게 도움이되었고 코드 변경을 요구하지 않았습니다.

    org.springframework.web.servlet.mvc.method.annotation의 로그 레벨을 DEBUG로 설정했습니다. 제 경우에는 클라이언트 코드에서 400 개의 응답을 보았지만 사용자 정의 오류 처리기를 사용하는 경우에도 서버 측에서 로깅하지 않았습니다. 로그 수준을 변경 한 후에는 문제가 분명했습니다.

    DEBUG 172.19.0.16     cs              2018-Jun-08 20:55:08.415 [https-jsse-nio-443-exec-9] - method.annotation.RequestResponseBodyMethodProcessor[line ?] - Read [class java.lang.String] as "application/xml;charset=UTF-8" with [org.springframework.http.converter.xml.MarshallingHttpMessageConverter@2de50ee4]
    DEBUG 172.19.0.16     cs              2018-Jun-08 20:55:08.418 [https-jsse-nio-443-exec-9] - method.annotation.ServletInvocableHandlerMethod[line ?] - Failed to resolve argument 0 of type 'java.lang.String'
    org.springframework.beans.TypeMismatchException: Failed to convert value of type 'core.dto.RequestDTO' to required type 'java.lang.String'
    
  4. from https://stackoverflow.com/questions/17326976/spring-rest-using-jackson-400-bad-request-logging by cc-by-sa and MIT license