@RestController注解有两个目的。(@Controller+@ResponseBody)
首先他是一个类似于@controller和@Service的构造型注解,能够让类被组件扫描功能发现。
但是,与REST最相关在于@RestController会告诉Spring,控制器中所有的处理器方法的返回值都要直接写入响应体中,而不是将值放到模型中并传递给一个视图以便于渲染。
@Controller标识的类,该类代表控制器类(控制层/表现层)。这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层)
@Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了。
@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。
格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换
@PreAuthorize注解会在方法执行前进行权限验证,支持Spring EL表达式,它是基于方法注解的权限解决方案。只有当@EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize才可以使用
示例:
@PreAuthorize("@ss.hasPermi('system:user:remove')")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8")
@Getter(onMethod = @__( @JsonIgnore))
给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)。
使用在成员变量或者类上,为特定成员变量/类中所有变量生成Getter/Setter方法。
用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性。
注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor
@Data生成的 equals 方法,只对该类里自有的属性进行了比较,如果将其父类属性也进行比较,需要加上注解@EqualsAndHashCode(callSuper = true)
用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法,具体示例可以参考@Data部分
lombok可以快速生成多种常用日志实例,包括Commonslog、log、log4j、slf4j等等,具体的使用可以依照需求灵活选择。
这个注解用在变量前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的close()方法,如果该资源有其它关闭方法,可使用@Cleanup(“methodName”)来指定要调用的方法.
该注解自动添加到同步机制,有趣的是,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上
这个注解用在方法上,可以将方法中的代码用try-catch语句包裹起来,捕获异常并在catch中用Lombok.sneakyThrow(e)把异常抛出,可以使用@SneakyThrows(Exception.class)的形式指定抛出哪种异常,很简单的注解
自动生成hashCode() 和 equals()方法。该注解用于子类对象之间进行比较的时候。不加该注解的影响:子类对象属性值一致,但其继承的父类对象属性值不一致,在比较的时候会出现比较结果不对的情况。
@EqualsAndHashCode(callSuper = true),那就是用自己的属性和从父类继承的属性 来生成hashcode,将其父类属性也进行比较
(1) 不用@Builder.Default,为成员变量设置默认值,new出来的对象自带默认值
(2) 不用@Builder.Default,为成员变量设置默认值,Student.builder().build(),不带默认值
(3) 启用@Builder.Default,new出来的对象为空对象,不带默认值
(4) 启用@Builder.Default,不设置-> Student.builder().build(),为默认值
(5) 启用@Builder.Default,设置-> Student.builder().age(4).build(),为设置的值
@ApiOperation:"用在请求的方法上,说明方法的作用"
value="说明方法的作用"
notes="方法的备注说明"
@ApiOperation(value="用户注册",notes="手机号、密码都是必输项,年龄随边填,但必须是数字")
@ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”
@ApiImplicitParams:用在请求的方法上,包含一组参数说明
@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的配置信息
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求头;请求参数的获取:@RequestHeader
· query --> ?param=value的形式;请求参数的获取:@RequestParam
· path(用于restful接口)--> 路径,Restful风格接口;请求参数的获取:@PathVariable
· body(不常用):请求体;
· form(不常用) :以form表单的形式提交
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
@ApiModel:用于响应类上,表示一个返回响应数据的信息
(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性