今天简单梳理一下实习中用过的注解(有的来源于baidu,侵权删)
一 bean的处理
依赖注入
@Autowired : 用来实现依赖注入,按by type自动注入(当设置required = false 找不到bean也不报错)
@Resource : 按byName自动注入
标注类被spring管理
@Component :通用的注解,可标注任意类为 Spring 组件
@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作(一般可用MapperScan扫描dao层文件夹)
@Service : 对应服务层,主要涉及一些复杂的逻辑,操作数据库需要用到 Dao 层
@Controller : 对应 Spring MVC 控制层,一般需要注入 Service 类返回结果数据
@RestController : 继承于 @Controller,区别在于标注后整个类所有方法将直接返回 JSON 数据,不再需要视图解析处理,用于前后端分离的项目后端都是直接用这个注解的
@Configuration : 声明配置类
@DependsOn注解可以配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象
@Scope : 声明 Spring Bean 的作用域 ,scopeName 默认为空字符串 ( "" ),表示SCOPE_SINGLETON
singleton:唯一 bean 实例,Spring 中的 bean 默认都是单例的。
prototype:每次请求都会创建一个新的 bean 实例。
request:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
session:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
二 HTTP请求
4 种常见的http请求
@GetMapping : GET 请求,获取资源。
@PostMapping : POST 请求,创建一个新的的资源。
@PutMapping : PUT 请求,更新资源。
@DeleteMapping : DELETE 请求,删除资源。
三 前后端参数传递
@RequestParam 用在方法的参数前面,获取请求中表单类型的key=value格式的数据。
@PathVariable 用于获取请求路径中的参数/{id}。
@RequestBody
获取请求 body 中的数据, 请求体 的Content-Type 必须为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。
@ResponseBody
表示该方法的返回结果直接写入 HTTP response body 中,格式为 json。
@RestController = @Controller 和 @ResponseBody
值得一提的是:请求方法只可以有一个@RequestBody,如果你需要开启参数校验,需要加上@Valid,如果验证失败将抛出异常:MethodArgumentNotValidException
是可以有多个 @RequestParam 和 @PathVariable。
四 读取配置
System.getenv(“bser_url”) 读取环境变量
@value 读取application.properties 或者 application.yml的值
@ConfigurationProperties 读取配置与bean绑定
@PropertySource 这个注解是用来指定读取我们自定义的配置文件的()。
@PropertySource(value = {"classpath:my.properties"})
五 参数校验
需要注意的是:Spring Boot 2.3开始 要单独引入Hibernate Validator依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.5.5</version>
</dependency>
Bean字段验证注解(详细使用要百度一下)
@NotEmpty 被注释的字符串的不能为 null 也不能为空
@NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是 Email 格式。
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Validated
如用 @PathVariables 和 @RequestParam 注解来获取入参,需要在类上加@Validated告诉spring开启校验
六 统一异常处理
@ControllerAdvice : 定义全局异常处理类,包含 @Component 所以可以被 Spring 扫描到。
@ExceptionHandler : 声明异常处理方法,表示遇到这个异常,就执行标注的方法。
@ControllerAdvice
@ResponseBody
class GlobalDefaultExceptionHandler {
// 如果是遇到注解中指定的异常就会进这个方法处理后返回
@ExceptionHandler({MethodArgumentNotValidException.class, ConstraintViolationException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map argumentErrorHandler() {
//异常处理逻辑
Map map = new HashMap();
map.put("error", "参数不合法");
map.put("param", req.getParameterMap());
return map;
}
}
柒 JSON格式处理
指定过滤字段
@JsonIgnoreProperties 作用在类上用于过滤掉特定字段不返回或者不解析。
@JsonIgnore一般用于类的属性上,作用和上面的@JsonIgnoreProperties 一样
@Data
@JsonIgnoreProperties({"password"})
public class User {
private String userName;
private String fullName;
@JsonIgnore
private String password;
}
格式化 json 数据
必须是返回JSON数据,才会格式化
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createDate;
扁平化对象
@JsonUnwrapped 代码会更好理解
@Data
public class Account {
@JsonUnwrapped
private Location location;
@JsonUnwrapped
private PersonInfo personInfo;
@Data
public static class Location {
private String provinceName;
private String countyName;
}
@Data
public static class PersonInfo {
private String userName;
private String fullName;
}
}
没加注解
{
"location": {
"provinceName":"上海",
"countyName":"浦东"
},
"personInfo": {
"userName": "long",
"fullName": "程序员"
}
}
加了后
{
"provinceName":"上海",
"countyName":"浦东",
"userName": "long",
"fullName": "程序员"
}
八 配置启动
@SpringBootApplication : 等价于使用 @Configuration、@EnableAutoConfiguration、@ComponentScan 三个注解。
@Configuration:声明是是一个 Java 形式的配置类,Spring Boot 提倡基于 Java 的配置,相当于你之前在 xml 中配置 bean;
@EnableAutoConfiguration: Spring 实现自动配置的开关。
@ComponentScan:标注哪些路径下的类需要被Spring扫描。
九 跨域
@CrossOrigin
注解将为请求处理类或请求处理方法提供跨域调用支持。
如果我们将此注解标注类,那么类中的所有方法都将获得支持跨域的能力。
使用此注解的好处是可以微调跨域行为
end 如有错误 欢迎指正