programing

봄 MVC에서 HandlerInterceptor.afterCompletion()이 응답 코드를 변경합니다.

oldcodes 2023. 8. 17. 21:51
반응형

봄 MVC에서 HandlerInterceptor.afterCompletion()이 응답 코드를 변경합니다.

저는 스프링 MVC 프레임워크를 사용하고 있습니다.예외가 발생할 때마다 오류 상태를 기록하고 싶습니다.afterCompletion사용되는 방법HanlderInterceptor.

@Override
public void afterCompletion( final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex)
{
    final int responseCode = response.getStatus();
    s_logger_error.error("status code: " + responseCode );
}

이 코드는 로컬 컴퓨터에서 응용 프로그램으로 실행하면 잘 작동합니다.그러나 Jetty 서버에서 호스팅하면 UI가 올바른 오류 응답을 받습니다(나의 경우).409), 그러나 이 방법에서는 로 기록됩니다.200.

[원격 디버그의 이미지가 표시되는 위치status=200하지만 그에 대한 반응은 그렇습니다.409]enter image description here

누가 응답 코드에 변경이 있는 이유를 이해하는 것을 도와줄 수 있습니까?

스프린트 1.1.7을 사용하고 있습니다.릴리스 스프링 부트 버전 및 제트 분배-9.2.10.v20150310.

당신은 당신이 전화했는지 확인해야 합니다.setStatus당신의 방법response예외에 대한 반대

이 문제를 해결하려면 스프링 부트 버전 1.1.11로 업그레이드하면 문제를 해결할 수 있습니다.이것은 이 수정과 관련이 있습니다.수정하기 전에,ErrorPageFilter랩된 응답의 응답 상태를 마스킹하는 것이었습니다.sendError메소드가 명시적으로 호출되지 않았습니다.ErrorWrapperResponse.

수정 후 코드가 단순에서 변경되었습니다.return this.status로.

        if (this.errorToSend) {
            return this.status;
        }
        else {
            // If there was no error we need to trust the wrapped response
            return super.getStatus();
        }

그것이 업그레이드가 당신의 문제를 해결할 것이라고 믿는 이유입니다.

마지막으로 문제가 지속될 경우 디버깅을 통해 문제의 원인을 표시해야 합니다.

언급URL : https://stackoverflow.com/questions/30049232/handlerinterceptor-aftercompletion-in-spring-mvc-changes-response-code

반응형