spring controlleradvice 예제

spring controlleradvice 예제

일반적으로 웹 요청을 처리할 때 처리되지 않은 예외는 서버가 HTTP 500 응답을 반환하도록 합니다. 그러나 직접 작성하는 예외는 @ResponseStatus 개의 추가(HTTP 사양에 정의된 모든 HTTP 상태 코드를 지원)로 추가할 수 있습니다. 컨트롤러 메서드에서 경고된 예외가 throw되고 다른 곳에서 처리되지 않는 경우 지정된 상태 코드와 함께 적절한 HTTP 응답이 자동으로 반환됩니다. 이 접근 방식에는 주요 단점이 있습니다 – @ExceptionHandler 개의 추가된 메서드는 전체 응용 프로그램에 대해 전 세계적으로 활성화되지 않고 특정 컨트롤러에 대해서만 활성화됩니다. 물론 모든 컨트롤러에 이 것을 추가하면 일반적인 예외 처리 메커니즘에 적합하지 않습니다. 개발자는 컨트롤러 조언 클래스 작업을 만들기 위해 여러 가지 방법을 테스트했습니다. 노력 후, 그들은 고려할 다음 포인트를 발견: 이것은 스프링 MVC @ControllerAdvice 개의 비고의 예. GlobalExceptionHandlerhandler 는 @ControllerAdvice 함께 추가되었기 때문에 응용 프로그램 전체의 컨트롤러에서 예외를 가로챌 것입니다. 이 클래스 처리기에서 모든 예외를 다르게 처리 해야 하므로 예외당 하나씩 선언 되므로 API 의 사용자가 이해할 수 있는 오류 메시지를 얻을 수 있습니다. 이 앱에서 ContentNotAllowedException에는 부적절한 단어 목록이 포함되어 있지만 UserNotFoundException은 메시지만 보유합니다. 이러한 예외를 처리하기 위해 컨트롤러 조언 클래스를 작성해 보겠습니다. 모든 컨트롤러가 기본 컨트롤러 클래스를 확장하면 이러한 제한을 해결할 수 있지만, 어떤 이유로든 이것이 불가능한 응용 프로그램에는 문제가 될 수 있습니다.

예를 들어 컨트롤러는 이미 다른 jar에 있거나 직접 수정할 수 없거나 직접 수정할 수 없는 다른 기본 클래스에서 확장될 수 있습니다. Eugen -이 블로그는 매우 유용합니다! 나는 몇 년 동안 봄을 사용했지만 자신을 최신 상태로 가져 오는 것을 거부했습니다. 나는 실제로 작동하는 예제 코드 (블로그및 게시물의 전형적인 것이 아님)에 깊은 인상을 받았습니다. 스프링 프레임워크를 구성하려면 개발자는 기본 Java 클래스와 외부 세계 간의 인터페이스를 제공하는 컨트롤러어드디스패처-servlet.xml과 같은 bean 구성 파일을 구현해야 합니다. 다음 코드 추가: 이러한 메서드 중 에서 추가 처리를 수행하도록 선택할 수 있습니다. 이 문서에 노출된 포인트와 함께 고유한 컨트롤러 조언 클래스를 작성하는 것이 좋습니다. 모든 예외 처리기를 단일 클래스에 두는 것을 주셔서 감사합니다. 동일한 컨트롤러에서 요청 처리(@RequestMapping) 메서드에 의해 throw된 예외를 구체적으로 처리하기 위해 모든 컨트롤러에 추가(@ExceptionHandler) 메서드를 추가할 수 있습니다. 이러한 메서드는 다음을 수행하여 사용자 클릭시 컨트롤러 메서드를 호출하는 자습서의 인덱스 페이지를 만들 차례입니다.

그래서 우리는 SpringMvcController조언에 간단한 결과보기를 작성하자Annotation / SRC / 메인 / 웹 앱 / 폴더. 다음 코드를 추가합니다: web.xml 파일은 모든 종류의 요청을 수신하기 위해 하나의 서벌렛(즉, 디스패처 서발)을 선언합니다. 디스패처 서볼렛은 여기서 전면 컨트롤러 역할을 합니다. 다음 코드를 추가하십시오 : 컨트롤러용 패키지가 v1 및 v2 패키지로 두 개의 패키지를 지원합니다.