Spring Boot 의 @ Controller Advice 처리 이상

@ Controller Advice 주해 에 대해 저 희 는 @ ExceptionHandler 주 해 를 결합 하여 전체 이상 처리 에 사용 합 니 다.
사실 Controller Advice 를 분리 하면 Controller + Advice 입 니 다.Advice 는 Spring Aop 의 절단면 으로 절단면 의 모든 속성 을 봉인 하 는 데 사 용 됩 니 다. 이 는 삽입점 과 짜 야 할 절단면 논 리 를 포함 합 니 다. @Controller Advice 의 용법 은 기본적으로 이 를 특정한 bean 에 설명 한 다음 이 bean 의 방법 에 있어 서 다른 주 해 를 사용 하여 서로 다른 직 입 논 리 를 지정 하 는 것 이다.그러나 여기 서 @ Controller Advice 는 AOP 방식 으로 업무 논 리 를 짜 는 것 이 아니 라 Spring 내장 에서 각 논리 에 대한 짜 임 방식 을 내장 지원 합 니 다.
Spring 3. 2 에 @ Controller Advice, @ RestController Advice 주 해 를 추 가 했 습 니 다. @ ExceptionHandler, @ InitBinder, @ ModelAttribute 를 정의 하고 모든 @ RequestMapping, @ PostMapping, @ GetMapping 주해 에 적용 할 수 있 습 니 다.
다음은 @ ExceptionHandler, @ InitBinder, @ ModelAttribute 라 는 세 가지 주 해 를 설명 합 니 다.
  • @ ExceptionHandler 는 Controller 에서 던 진 지정 한 유형의 이상 을 포착 하여 서로 다른 유형의 이상 차이 처리 목적 을 달성 합 니 다.
  • @ InitBinder 는 request 에서 사용자 정의 매개 변수 분석 방식 으로 등록 하여 지정 한 형식 매개 변 수 를 사용자 정의 하 는 목적 을 달성 합 니 다.
  • @ ModelAttribute 는 표 시 된 방법 이 목표 Controller 방법 이 실행 되 기 전에 실 행 될 것 이 라 고 밝 혔 다.

  • 먼저 @ Controller Advice 의 소스 코드 를 보십시오.
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface ControllerAdvice {
        @AliasFor("basePackages")
        String[] value() default {};
    
        @AliasFor("value")
        String[] basePackages() default {};
    
        Class>[] basePackageClasses() default {};
    
        Class>[] assignableTypes() default {};
    
        Class extends Annotation>[] annotations() default {};
    }

    basePackage, 성명 의 클래스 (하나의 배열) 가 지정 한 Annotation 매개 변 수 를 전달 합 니 다. 구체 적 인 참고: spring framework doc
    @ExceptionHandler
    컨트롤 러 에서 던 진 지정 한 형식의 이상 을 포착 하면 전역 과 국부 이상 을 처리 할 수 있 습 니 다.
    /**
     *        
     * @author wangchengxi
     * @date 2019/1/6 11:20
     */
    @ControllerAdvice
    public class BaseExceptionHandler {
    
        // @ExceptionHandler :            
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public Result error1(Exception e) {
            return new Result(false, StatusCode.ERROR, e.getMessage());
        }
    
        //        
        @ExceptionHandler(NullPointerException.class)
        public Result error2(Exception e) {
            return new Result(false, StatusCode.ERROR, e.getMessage());
        }
    
        //        
        @ExceptionHandler(RuntimeException.class)
        public Result error3(Exception e) {
            return new Result(false, StatusCode.ERROR, e.getMessage());
        }
    }
    

     @InitBinder
    사용자 정의 특수 매개 변 수 를 연결 합 니 다. 이것 은 Spring 이 직접 지원 하지 않 은 것 입 니 다. 예 를 들 어 Date.
    @ControllerAdvice
    public class BaseExceptionHandler {   
     
        //      @RequestMapping    ,              
        @InitBinder
        public void initWebBinder(WebDataBinder binder){
            //        
            binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
            //        
            //binder.setValidator();
        }
    }

     @ModelAttribute
    @ Controller Advice 와 결합 하여 방법 성명 에 사용 합 니 다. 이 방법 은 @ Controller Advice 가 지정 한 범위 내 모든 인터페이스 방법 이 실행 되 기 전에 실 행 됩 니 다. 또한 @ ModelAttribute 에 표 시 된 방법의 반환 값 은 추 후 호출 될 인터페이스 방법 을 제공 할 수 있 습 니 다.
    @ControllerAdvice
    public class BaseExceptionHandler { 
       
        //      Model ,   @RequestMapping       
        @ModelAttribute
        public void addAttribute(Model model) {
            model.addAttribute("attribute",  "The Attribute");
        }
    }
    
    
    //     name value  ,           
     :
    @ModelAttribute(value = "The Attribute")

    방법 매개 변수 에 도 정의 할 수 있 습 니 다.
      @RequestMapping(method = RequestMethod.GET)
      public ModelAndView detail(@RequestParam("id") long id, 
           @ModelAttribute("message") String message) {
        ModelAndView view = new ModelAndView("user");
        User user = userService.detail(id);
        view.addObject("user", user);
        return view;
      }

     이상 은 제 가 자신의 학습 에 따라 이미 인터넷 에서 찾 은 관련 자료 문 서 를 정리 한 소결 입 니 다.

    좋은 웹페이지 즐겨찾기