Spring;SpringBoot常用注解总结
2022-11-29 14:00:19 32 举报
AI智能生成
根据 JavaGuide 绘制的脑图
作者其他创作
大纲/内容
这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上:
我们可以把 @SpringBootApplication 看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。
根据 SpringBoot 官网,这三个注解的作用分别是:@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制@ComponentScan: 扫描被 @Component (@Repository,@Service,@Controller) 注解的 bean,注解默认会扫描该类所在的包下所有的类。@Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
@SpringBootApplication
span style=\
自动导入 Bean 对象到类中
将 Bean 类注入到 Spring 组件
@RestController 注解是 @Controller 和 @ResponseBody 的合集,表示这是个控制器 bean,并且是 将函数的返回值 直接填入 HTTP 响应体中,是 REST 风格的控制器。
单独使用 @Controller 不加 @ResponseBody 的话一般是用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,对应于前后端不分离的情况。@Controller +@ResponseBody 返回 JSON 或 XML 形式数据
@Scope:声明 Spring Bean 的作用域,使用方法:
四种常见的 Spring Bean 的作用域:singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。prototype : 每次请求都会创建一个新的 bean 实例。request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。session : 每一个 HTTP Session 会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
声明 Bean 的作用域
@Configuration:一般用来声明配置类,可以使用 @Component 注解替代,不过使用 @Configuration 注解声明配置类更加语义化。
声明配置类 Bean
Spring Bean 相关
5 种常见的请求类型:GET :请求 从服务器获取特定资源。举个例子:GET /users(获取所有学生)POST :在服务器上 创建 一个新的资源。举个例子:POST /users(创建学生)PUT :更新 服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /users/2(更新编号为 2 的学生)DELETE :从服务器 删除 特定的资源。举个例子:DELETE /users/2(删除编号为 2 的学生)PATCH :更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新),使用的比较少。
GET 请求:@GetMapping(\"users\") 等价于 @RequestMapping(value=\"/users\
POST 请求:@PostMapping(\"users\") 等价于 @RequestMapping(value=\"/users\
PUT 请求:@PutMapping(\"/users/{userId}\") 等价于 @RequestMapping(value=\"/users/{userId}\
DELETE 请求:@DeleteMapping(\"/users/{userId}\") 等价于 @RequestMapping(value=\"/users/{userId}\
PATCH 请求:一般实际项目中,我们都是 PUT 不够用了之后才用 PATCH 请求去更新数据。
处理常见的 HTTP 请求类型
@PathVariable 用于获取 路径参数,@RequestParam 用于获取 查询参数。
@PathVariable 和 @RequestParam
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且 Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用 HttpMessageConverter 或者自定义的 HttpMessageConverter 将请求的 body 中的 json 字符串转换为 java 对象。
UserRegisterRequest对象:
这样我们的后端就可以直接把 json 格式的数据映射到我们的 UserRegisterRequest 类上。
@RequestBody
👉 需要注意的是:一个请求方法只可以有一个 @RequestBody,但是可以有多个 @RequestParam 和 @PathVariable。 如果你的方法必须要用两个 @RequestBody 来接受数据的话,大概率是你的数据库设计或者系统设计出问题了!
前后端传值
很多时候我们需要将一些常用的配置信息比如阿里云 oss、发送短信、微信认证的相关配置信息等等放到配置文件中。
下面我们来看一下 Spring 为我们提供了哪些方式帮助我们从配置文件中读取这些配置信息。
编写一个 yaml 的配置文件:
使用 @Value(\"${property}\") 读取比较简单的配置信息:
需要注意的是 @value这种方式是不被推荐的,Spring 比较建议的是下面几种读取配置信息的方式。
1. 通过 @value 读取比较简单的配置信息
LibraryProperties 类上加了 @Component 注解,我们可以像使用普通 bean 一样将其注入到类中使用。
这个时候你就可以像使用普通 bean 一样,将其注入到类中使用:
控制台输出:
2. 通过 @ConfigurationProperties 读取并与 bean 绑定
我们先将 application.yml 修改为如下内容,明显看出这不是一个正确的 email 格式:
ProfileProperties 类没有加 @Component 注解:
我们在要使用 ProfileProperties 的地方使用 @EnableConfigurationProperties 注册我们的配置 bean:
因为邮箱格式不正确,所以程序运行的时候就报错,根本运行不起来,保证了数据类型的安全性:
我们把邮箱测试改为正确的之后再运行,控制台就能成功打印出读取到的信息:
3. 通过 @ConfigurationProperties 读取并校验
编写一个类,定义一些对象来存储配置:
只需要在使用的地方注入这个类,就可以直接调用 get 方法获取:
4. @PropertySource 读取指定的 properties 文件
读取配置文件
数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。
JSR(Java Specification Requests) 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,可以直接将这些注解加在我们 JavaBean 的属性上面,这样就可以在需要校验的时候进行校验了,非常方便!
注:更新版本的 spring-boot-starter-web 依赖中不再有 hibernate-validator 包(如2.3.11.RELEASE),需要自己引入 spring-boot-starter-validation 依赖。
需要注意的是: 所有的注解,推荐使用 JSR 注解,即 javax.validation.constraints,而不是 org.hibernate.validator.constraints
一些常用的字段验证的注解:ul style=\
验证请求体(RequestBody)
我们在需要验证的参数上加上了 @Valid 注解,如果验证失败,它将抛出 MethodArgumentNotValidException。
验证请求参数(Path Variables 和 Request Parameters):一定一定不要忘记在类上加上 @Validated 注解了,这个参数可以告诉 Spring 去校验方法参数。
简单介绍
在 Spring/Spring Boot 中做参数校验
更多详细内容查看
参数校验
相关注解:@ControllerAdvice:注解定义全局异常处理类@ExceptionHandler:注解声明异常处理方法
如何使用呢?拿我们上面的参数校验这块来举例子。如果方法参数不对的话就会抛出 MethodArgumentNotValidException,我们来处理这个异常。
SpringBoot 处理异常的几种常见姿势
封装一个优雅的 Spring Boot 全局异常处理:
全局处理 Controller 层异常
在要开启事务的方法上使用 @Transactional 注解即可!
我们知道 Exception 分为运行时异常 RuntimeException 和非运行时异常。在 @Transactional 注解中如果 不配置 rollbackFor属性,那么事务只会在 遇到 RuntimeException 的时候才会 回滚,加上 rollbackFor=Exception.class。可以让事务在 遇到非运行时异常时也回滚。
@Transactional 注解一般可以作用在类或者方法上:ul style=\
详细讲解:
事务 @Transaction
@JsonIgnoreProperties 作用在类上用于过滤掉特定字段不返回或者不解析。
@JsonIgnore 一般用于类的属性上,作用和上面的 @JsonIgnoreProperties 一样。
1. 过滤 json 数据
@JsonFormat 一般用来格式化 json 数据。
2. 格式化 json 数据
嵌套类:
使用 @JsonUnwrapped 扁平对象之后:
3. 扁平化对象
Json 数据处理
@ActiveProfiles 一般作用于测试类上, 用于声明生效的 Spring 配置文件。
@Test声明一个方法为测试方法@Transactional 被声明的测试方法的数据会回滚,避免污染测试数据。@WithMockUser Spring Security 提供的,用来模拟一个真实用户,并且可以赋予权限。
测试相关
Spring&SpringBoot 常用注解总结
0 条评论
回复 删除
下一页