[SPRING] Spring @ExceptionHandler에서 @ ResponseStatus-annotated 예외로 예외를 다시 발생시키는 방법?
SPRINGSpring @ExceptionHandler에서 @ ResponseStatus-annotated 예외로 예외를 다시 발생시키는 방법?
나는 404 페이지를 원할 때 항상 던지고있는 예외를 만들었습니다.
@ResponseStatus( value = HttpStatus.NOT_FOUND )
public class PageNotFoundException extends RuntimeException {
내 404 예외로 ArticleNotFoundException (오류 500 발생) 다시 던져 컨트롤러 범용 @ExceptionHandler 만들려는 :
@ExceptionHandler( value=ArticleNotFoundException.class )
public void handleArticleNotFound() {
throw new PageNotFoundException();
}
하지만 작동하지 않습니다 - 난 아직도 오류 500 및 봄 로그 :
ExceptionHandlerExceptionResolver - @ExceptionHandler 메서드의 호출에 실패했습니다.
응답 코드는 ResponseEntity와 같이 비어 있거나 간단한 문자열 일 수 없으므로 코드를 html로 변환합니다. web.xml 항목 :
<error-page>
<location>/resources/error-pages/404.html</location>
<error-code>404</error-code>
</error-page>
답변에서 최종 해결 방법
그것은 완전히 다시 던지지만, 적어도 내 PageNotFoundException 같은 web.xml 오류 페이지 매핑을 사용하여
@ExceptionHandler( value = ArticleNotFoundException.class )
public void handle( HttpServletResponse response) throws IOException {
response.sendError( HttpServletResponse.SC_NOT_FOUND );
}
해결법
-
==============================
1.예외를 throw하는 대신 다음을 시도하십시오.
예외를 throw하는 대신 다음을 시도하십시오.
@ExceptionHandler( value=ArticleNotFoundException.class ) public ResponseEntity<String> handleArticleNotFound() { return new ResponseEntity<String>(HttpStatus.NOT_FOUND); }
이것은 기본적으로 컨트롤러에 의해 404로 변환되는 Spring 객체를 반환합니다.
프런트 엔드에 다른 HTTP 상태 메시지를 반환하려는 경우 다른 HttpStatus를 전달할 수 있습니다.
주석을 사용하여이 작업을 수행하지 못한 경우 @ResponseStatus를 사용하여 컨트롤러 메서드에 주석을 달고 예외를 throw하지 마십시오.
기본적으로 @ExceptionHandler를 사용하여 메소드에 주석을 추가하면 Spring이 해당 메소드가 예외를 소비하고 다른 메소드를 throw하지 않을 것이라고 90 % 확신합니다. 다른 예외를 throw함으로써 Spring은 예외가 처리되지 않았고 예외 처리기가 실패한 것으로 생각하므로 로그의 메시지
편집하다:
특정 페이지로 돌아가려면
return new ResponseEntity<String>(location/of/your/page.html, HttpStatus.NOT_FOUND);
편집 2 : 당신은 이것을 할 수 있어야합니다 :
@ExceptionHandler( value=ArticleNotFoundException.class ) public ResponseEntity<String> handleArticleNotFound(HttpServletResponse response) { response.sendRedirect(location/of/your/page); return new ResponseEntity<String>(HttpStatus.NOT_FOUND); }
from https://stackoverflow.com/questions/23077573/how-to-rethrow-exception-as-responsestatus-annotated-exception-in-spring-excep by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링과 같은 안드로이드 애플리케이션 프레임 워크가 있습니까? (0) | 2019.02.17 |
---|---|
[SPRING] 각도 js spring mvc를 사용하여 멀티 파트 파일을 업로드하는 방법 (0) | 2019.02.17 |
[SPRING] Spring 데이터 나머지 페이지 가능 자식 콜렉션 (0) | 2019.02.17 |
[SPRING] 빈으로 새 대기열, 바인딩 및 교환을 동적으로 추가 (0) | 2019.02.17 |
[SPRING] 스프링으로 에러 메시지를받는 중 "cvc-elt.1 : 'beans'요소의 선언을 찾을 수 없습니다." (0) | 2019.02.17 |