스프링 부트기반 응용 프로그램에서 ResponseEntityExceptionHandler
을 사용하여 오류를 단일 장소에서 캡처하고 일관된 오류 페이로드를 출력합니다.Spring ResponseEntityExceptionHandler와 원래의 POST 페이로드
모든 것이 예상대로 작동합니다. ResponseEntityExceptionHandler
에는 유효하지 않은 메시지 (내 경우에는 JSON 페이로드)를 보내는 클라이언트에 "반응"하는 데 사용할 수있는 handleHttpMessageNotReadable
메서드가 있습니다.
다시 예상대로 작동합니다. 클라이언트 POST
잘못된 JSON 문서 인 경우 handleHttpMessageNotReadable
의 코드가 올바르게 실행됩니다.
이제 모니터링을 위해 잘못된 JSON을 기록하고 싶습니다. 페이로드를 확보하기 위해 handleHttpMessageNotReadable
메서드 내부에서 사용하는 코드입니다.
java.lang.IllegalStateException: getInputStream() has already been called for this request
원본에 액세스 할 수있는 간단한 방법이 될 것입니다 무엇 : 예상대로 스트림이 이미 잭슨에 의해 소비되어 있기 때문에 String line = null;
StringBuffer jb = new StringBuffer();
try {
BufferedReader reader = servletWebRequest.getRequest().getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (IOException e) {
e.printStackTrace();
}
, 나는 실제로 JSON 페이로드를 구문 분석 예외를 얻을 POST 페이로드? 원본 페이로드 (MyException extends HttpMessageNotReadableException
)를 포함하는 사용자 지정 예외를 throw 할 수 있습니까?
감사합니다. 귀하의 접근 방식은 트릭을 수행했습니다. 나는'MappingJackson2HttpMessageConverter'의 서브 클래스를 만들고'read' 메소드를 덮어 썼습니다. 부팅에서 작동 할 수있는 새로운 매퍼 위해서는 , 나는 단순히'Bean' @ 내 구성에서, 그래서 같은 선언 : '@Bean 공공 MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter()() {새로운 PayloadCaptureMappingJackson2HttpMessageConverter을 반환 ; }' – Luciano