Spring Boot 의 @ Controller Advice 처리 이상
사실 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 라 는 세 가지 주 해 를 설명 합 니 다.
먼저 @ 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;
}
이상 은 제 가 자신의 학습 에 따라 이미 인터넷 에서 찾 은 관련 자료 문 서 를 정리 한 소결 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.