# 其他注解

# PostConstruct

当一个类被装配好后执行该函数

@Component
public class Filer{
	@PostConstruct
	public void init(){
		// DO
	}
}

# 参数校验

# 启用校验

必须显示的启用校验才能使参数校验开始工作

# @Valid

SpringBoot默认支持,遵守(JSR-303/JSR-380)Java Bean Validated标准

# @Validated

SpringBoot特别提供需要依赖Spring-boot-stater-validation,是Java Bean Validated的拓展

# 区别

@Valid @Validated
遵循标准 Java Bean Validted Spring拓展
作用范围 全部支持 不支持字段,方法返回值
分组校验 no Yes
嵌套校验 Yes 配合@Valid

# 校验注解

注解 说明
@NotNull 校验字段值不能为 null
@Null 校验字段值必须为 null
@NotEmpty 校验字段值不能为 null 或空。
@NotBlank 校验字符串值不能为 null 或空白字符。
@Size 校验字段值的长度或大小在指定范围内。
@Min 校验数字字段值必须大于或等于指定值。
@Max 校验数字字段值必须小于或等于指定值。
@DecimalMin 校验数字字段值必须大于或等于指定的小数值。
@DecimalMax 校验数字字段值必须小于或等于指定的小数值。
@Digits 校验数字字段值的整数部分和小数部分的位数是否符合要求。
@Positive 校验数字字段值必须为正数。
@PositiveOrZero 校验数字字段值必须为正数或零。
@Negative 校验数字字段值必须为负数。
@NegativeOrZero 校验数字字段值必须为负数或零。
@Email 校验字段值必须是一个合法的电子邮件地址。
@Pattern 校验字段值必须匹配指定的正则表达式。
@Future 校验日期字段值必须是将来的日期。
@FutureOrPresent 校验日期字段值必须是将来的日期或当前日期。
@Past 校验日期字段值必须是过去的日期。
@PastOrPresent 校验日期字段值必须是过去的日期或当前日期。

# 配置注入

# @Value

@Value("${keyName}") 从配置文件中获取指定的键值,支持使用SpEL表达式

/* yml文件数据如下
keyName: XXX
*/
@Value("${keyName}")
private int age; // = XXX

在使用SpEL表达式时

/* yml文件数据如下
lifeTime: 1000 * 60
*/
@Value("#{${lifeTime}}")
private int lifeTime; // 60000

# @ConfigurationProperties

@ConfigurationProperties(prefix="前缀") 只能从全局配置中读取

从配置文件中获取整体

/* yml文件中如下
user:
	name: XXX
	age: XXX
*/
@ConfigurationProPerties(prefix="user")
public class UserData{
	public String name;
	public int age;
}
// Springboot会自动帮你配置

# url请求路径解析(映射)

支持多种请求方法,最常用的就是Post,Get这两种

# @RequestMapping("url")

响应url路径请求, 可以自定义请求方式

# @PostMapping("url")

响应url路径的post请求

# @GetMapping("url")

响应url路径的get请求

/*下面这个类会响应/user下的请求*/
@RestController
@RequestMapping("user")
public class userController{
	@PostMapping("/data")
	public String data(){
		return "user data";
	}// 这个方法会响应/user/data 的post请求
}

# 组件

# @RestController

  • @RestController // 声明一个组件返回数据的组件

# @Controller

  • @Controller //控制组件声明,加入到Springboot容器中,用于对网络请求做出响应 返回图层的组件

# @Service

  • @Service // 服务组件声明,加入到Springboot容器中,用于处理业务逻辑

# @Repository

  • @Repository //仓库组件声明,加入到Springboot容器中,用于封装对数据库的访问

# @Component

  • @Component //普通组件声明,上述说道的声明都包含这个声明

# @Configuration

  • @Configuration // 声明配置类

# 请求解析方法

# @RequestParam

  • @RequestParam //声明接收url?后的参数

# @RequestBody

  • @RequestBody //声明接收body中的数据(json)

# @RequestHeader

  • @RequestHeader(name="XXX") //声明接收head中的XXX的值

# @PathVariable

  • @PathVariable // 从url中解析路径
/*假设有下列三个方法*/
/*假设请求为 url?name=123&password=123
那返回值就是123123
*/
@RequestParam
public String post(String name,String password){
 	return name+password;
}



/*
假设请求body为
"{
	"name": "123",
	"password": "123"
}"
如果参数是一个对象,并且可以和json格式相匹配,那Springboot会自动封装到数据中
这个过程应该是使用反射去调用getter/setter执行的,所以这两个方法是必要的
@Data
public class user{
	private String name;
	private String password;
}
*/
@RequestBody
public String post(String data){
	return data;
}
// data == 请求body(除非json格式和Java对象相匹配)



/*假设请求路径为/user/1
*/
@GetMapping("user/{id}")
public String post(@PathVariable("id") Long id){
	return id;
}
// id == 1



/*假设请求头header中jwt为"123"
那参数就是"123"
*/
public String post(@RequestHeader(name="jwt")String jwt){
	return jwt;
}