1. @SpringBootApplication
spring boot项目的启动注解,平时我们在创建spring boot项目后,会自动默认加在主类上
@SpringBootApplication 的功能可由 @Configuration、@EnableAutoConfiguration、@ComponentScan 三个注解替代。
- @Configuration :允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
- @EnableAutoConfiguration :允许启用 SpringBoot 的自动配置机制
- @ComponentScan :扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类。
2. Bean 相关注解
2.1 @Autowired
@Autowired 可以将被Spring 容器管理的类的对象自动导入到类中,需要被自动导入 bean的类,需要加上 @Component,@Repository,@Service, @Controller 注解
2.2 @Component @Repository @Service @Controller
要使用 @Autowired 给类自动装配bean,需要对类加上 @Component,@Repository,@Service, @Controller中的一个注解进行标记,当项目启动前进行扫包时,即可将对应的类放入spring 容器中。
- @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
- @Service : 对应服务层,主要涉及一些复杂的业务逻辑实现,需要用到 Dao 层。
- @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
- @Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
2.3 @RestController
@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器。
- 单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,对应于前后端不分离的情况。
- @Controller +@ResponseBody 返回 JSON 或 XML 形式数据
2.4 @Configuration
@Configuration 一般用来声明配置类,可由 @Component 注解替代,不过使用@Configuration注解声明配置类更加语义化,方便阅读。
3. 常见的 HTTP 请求类型 注解
该类注解加在方法上
3.1 GET :请求从服务器获取特定资源。
@GetMapping(“test”) 等价于@RequestMapping(value="/test",method=RequestMethod.GET)
@PostMapping(“test”) 等价于@RequestMapping(value="/test",method=RequestMethod.POST)
4. 参数传递
4.1 @PathVariable 和 @RequestParam
@PathVariable用于获取路径参数,@RequestParam用于获取查询参数。
// 当我们请求的 url 是:/api/{123456}/test?type=web
// 那么我们服务获取到的数据就是:testId=123456,type=web。
@GetMapping("/api/{testId}/test")
public List<Test> test(
@PathVariable("testId") Long klassId,
@RequestParam(value = "type", required = false) String type ) {
...
}
4.2 @RequestBody
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。
ps: 一个请求方法只可以有一个@RequestBody,但是可以有多个@RequestParam和@PathVariable。
5. 配置信息读取
一般,我们会把配置信息保存在 application.yml或者application.properties中,这时,可通过配置注解进行加载。
5.1
使用 @Value("${配置属性名}") 读取比较简单;
5.2 @ConfigurationProperties
通过@ConfigurationProperties读取配置信息并与 bean 绑定,可以像使用普通的 Spring bean 一样,将其注入到类中使用。
6. 参数校验
可对前端对传入后端的数据进行校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。
- @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 被注释的元素必须是一个将来的日期
- …
7. 测试相关
- @Test声明一个方法为测试方法
- @Transactional被声明的测试方法的数据会回滚,避免污染测试数据。