下面是RequestBody注解源码
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {
/**
* Whether body content is required.
* <p>Default is {@code true}, leading to an exception thrown in case
* there is no body content. Switch this to {@code false} if you prefer
* {@code null} to be passed when the body content is {@code null}.
* @since 3.2
*/
boolean required() default true;
}
现在讲一讲@RequestBody注解中用到其它注解
@Target注解
从字面上理解这个就是目标的意思,说明@RequestBody注解是作用于哪个上面
ElementType
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}
它的值有下列
值 | 说明(适用范围) |
---|---|
TYPE | 类,接口(包括注解类型),枚举 |
FIELD | 字段 |
METHOD | 方法 |
PARAMETER | 参数 |
CONSTRUCTOR | 构造方法 |
LOCAL_VARIABLE | 局部变量 |
ANNOTATION_TYPE | 注解类型 |
PACKAGE | 包 |
TYPE_PARAMETER | 类型参数,从1.8开始 |
TYPE_USE | 类型的使用,从1.8开始 |
@Retention注解
从字面上理解这个就是保留的意思,说明@RequestBody注解是在哪些环境下保留此注解
RetentionPolicy
public enum RetentionPolicy {
/**
* Annotations are to be discarded by the compiler.
*/
SOURCE,
/**
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
*/
CLASS,
/**
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
*
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
- SOURCE 在编译时不保留此注解,此注解存在源代码中|
- CLASS 在编译时保留注解于class文件中,VM运行时不需要保留,此值为默认值|
- RUNTIME 在编译时保留注解于class文件中,VM运行时保留此注解,所以它们可以被反射阅读|
@Documented注解
此注解说明,如果生成javadoc文档时,会将该注解加入到文档中。