@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @ControllerAdvice @ResponseBody public @interface RestControllerAdvice
@ControllerAdvice
and @ResponseBody
.
Types that carry this annotation are treated as controller advice where
@ExceptionHandler
methods assume
@ResponseBody
semantics by default.
NOTE: @RestControllerAdvice
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.
RestController
,
ControllerAdvice
Modifier and Type | Optional Element and Description |
---|---|
Class<? extends Annotation>[] |
annotations
Array of annotations.
|
Class<?>[] |
assignableTypes
Array of classes.
|
Class<?>[] |
basePackageClasses
Type-safe alternative to
basePackages() for specifying the packages
in which to select controllers to be advised by the @RestControllerAdvice
annotated class. |
String[] |
basePackages
Array of base packages.
|
String[] |
value
Alias for the
basePackages() attribute. |
@AliasFor(annotation=ControllerAdvice.class) public abstract String[] value
basePackages()
attribute.
Allows for more concise annotation declarations — for example,
@RestControllerAdvice("org.my.pkg")
is equivalent to
@RestControllerAdvice(basePackages = "org.my.pkg")
.
basePackages()
@AliasFor(annotation=ControllerAdvice.class) public abstract String[] basePackages
Controllers that belong to those base packages or sub-packages thereof
will be included — for example,
@RestControllerAdvice(basePackages = "org.my.pkg")
or
@RestControllerAdvice(basePackages = {"org.my.pkg", "org.my.other.pkg"})
.
value()
is an alias for this attribute, simply allowing for
more concise use of the annotation.
Also consider using basePackageClasses()
as a type-safe
alternative to String-based package names.
@AliasFor(annotation=ControllerAdvice.class) public abstract Class<?>[] basePackageClasses
basePackages()
for specifying the packages
in which to select controllers to be advised by the @RestControllerAdvice
annotated class.
Consider creating a special no-op marker class or interface in each package that serves no purpose other than being referenced by this attribute.
@AliasFor(annotation=ControllerAdvice.class) public abstract Class<?>[] assignableTypes
Controllers that are assignable to at least one of the given types
will be advised by the @RestControllerAdvice
annotated class.
@AliasFor(annotation=ControllerAdvice.class) public abstract Class<? extends Annotation>[] annotations
Controllers that are annotated with at least one of the supplied annotation
types will be advised by the @RestControllerAdvice
annotated class.
Consider creating a custom composed annotation or use a predefined one,
like @RestController
.