@ControllerAdvice
和@RestControllerAdvice
都可以指向控制器的一个子集:
// 指向所有带有注解@RestController的控制器
@ControllerAdvice(annotations = RestController.class)
public class AnnotationAdvice {}
// 指向所有指定包中的控制器
@ControllerAdvice("org.example.controllers")
public class BasePackageAdvice {}
// 指向所有带有指定签名的控制器
@ControllerAdvice(assignableTypes = {ControllerInterface.class, AbstractController.class})
public class AssignableTypesAdvice {}
@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Controller @ResponseBody public @interface RestController A convenience annotation that is itself annotated with @Controller and @ResponseBody. Types that carry this annotation are treated as controllers where @RequestMapping methods assume @ResponseBody semantics by default.NOTE: @RestController is processed
if an appropriate HandlerMapping-HandlerAdapter pair is configured such as the RequestMappingHandlerMapping-RequestMappingHandlerAdapter
pair which are the default in the MVC Java config and the MVC namespace.
@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface ControllerAdvice Indicates the annotated class assists a "Controller". Serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.It is typically used to define @ExceptionHandler, @InitBinder, and @ModelAttribute methods that apply to all @RequestMapping methods.
One of annotations(), basePackageClasses(), basePackages() or its alias value() may be specified to define specific subsets of Controllers to assist.
- meaning selected Controllers should match at least one selector.
When multiple selectors are applied, OR logic is appliedThe
default behavior (i.e. if used without any selector), the @ControllerAdvice annotated class will assist all known Controllers.Note that those checks are done at runtime, so adding many attributes and using multiple strategies may have negative impacts (complexity, performance).
https://docs.spring.io/spring-framework/docs/5.0.0.M1/javadoc-api/
原文地址:https://www.cnblogs.com/liaojie970/p/8502653.html