@RestController
此注解相当于
@Controller和@ResponseBody的快捷方式。当使用此注解时,不需要再在方法上使用@ResponseBody注解。
@ResponseBody
默认返回的会被转成
ModelAndView类型(找.jsp文件),使用该注解后默认返回String类型;通过 HttpMessageConverter 接⼝转为指定格式的数据, JSON、 XML 等,响应给客户端
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@ResponseStatus
@ResponseStatus注解可以标注请求处理方法。使用此注解,可以指定响应所需要的HTTP STATUS。
@ExceptionHandler
特性1:一次声明、全接口有效
- 使用
ControllerAdvice注解实现
特性2:就近原则 原理:
- 程序一开始会把所有的异常处理方法加载到Map中去,key为异常类型,value为解决方法
- 处理异常A时,会去Map取出异常A对应的method
- 如果没有,则在Map中把所有key取出来,找出所有异常A的父类
- 再找出继承深度最小的父类,拿到它的method
- 最后把异常A和method存到Map
@ControllerAdvice
通常与
ExceptionHandler搭配使用 搭配使用后所有@Controller类都能吃到ExceptionHandler的异常处理方法
@RequestMapping
@RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。
@RequestMapping注解对请求处理类中的请求处理方法进行标注;
@RequestMapping注解拥有以下的六个配置属性:
value:映射的请求URL或者其别名method:兼容HTTP的方法名params:根据HTTP参数的存在、缺省或值对请求进行过滤header:根据HTTP Header的存在、缺省或值对请求进行过滤consume:设定在HTTP请求正文中允许使用的媒体类型product:在HTTP响应体中允许使用的媒体类型
提示:在使用@RequestMapping之前,请求处理类还需要使用@Controller或@RestController进行标记
@SpringBootApplication
@SpringBootApplication注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。在Spring Boot应用程序的主类中,就使用了此注解。
@EnableAutoConfiguration
@EnableAutoConfiguration注解用于通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。
配置路径:org\springframework\boot\spring-boot-autoconfigure\2.2.4.RELEASE\spring-boot-autoconfigure-2.2.4.RELEASE.jar\META-INF\spring.factories
# Auto Configure 自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
@Transational
spring实现事务支持,可以定义事务信息(事务隔离级别、传播行为(什么时候为新事务)、超时、只读、回滚规则),通过 AOP 实现
很多资料都说需要先使用@EnableTransactionManagement开启事务 这一说法是针对Spring的 → 在SpringBoot中直接使用@Transactional即可
因为在SpringBoot的自动配置中,已经注入该注解
pom.xml中spring-boot-starter-parent → spring-boot-dependencies → spring-boot-autoconfigure
去到spring-boot-autoconfigure 中spring.factories文件定义了Auto Configure 的内容
其中有Transaction的自动装配
//spring.factories文件
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
//TransactionAutoConfiguration的静态内部类,加上了EnableTransactionManagement注解
public static class EnableTransactionManagementConfiguration {
@Configuration(proxyBeanMethods = false)
@EnableTransactionManagement(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false",
matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {
}
@Configuration(proxyBeanMethods = false)
@EnableTransactionManagement(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true",
matchIfMissing = true)
public static class CglibAutoProxyConfiguration {
}
}
事务隔离级别
- 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务
- 创建一个新的事务,如果当前存在事务,则把当前事务挂起。
- 如果当前存在事务,就在嵌套事务内执行;如果当前没有事务则单独开启一个事务
- 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
@Bean
标记方法,返回一个Bean对象,能够动态获取一个Bean对象
@PathVariable和@RequestParam
PathVariable只能用于接收url路径上的参数
用@PathVariable请求接口时,URL是:www.test.com/user/getUse…
RequestParam只能用于接收请求带的params
用@RequestParam请求接口时,URL是:www.test.com/user/getUse…
-
示例代码
package com.lrm.springbootdemo.web; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/v1") public class HelloController { @GetMapping("/books/{username}") public Object testPathVariable(@PathVariable String username){ Map<String,Object> map = new HashMap<>(); map.put("username",username); return map; } @PostMapping("/books2") public Object testRequestParam(@RequestParam("name") String name, @RequestParam("author") String author, @RequestParam("isbn") String isbn) { Map<String, Object> book = new HashMap<String, Object>(); book.put("name", name); book.put("author", author); book.put("isbn", isbn); return book; } @PostMapping("/books2/{id}") public Object test(@PathVariable("id") long id,@RequestParam("name") String name, @RequestParam("author") String author, @RequestParam("isbn") String isbn) { Map<String, Object> book = new HashMap<String, Object>(); book.put("id",id); book.put("name", name); book.put("author", author); book.put("isbn", isbn); return book; } }
@Async
使用异步调用
参数只有一个value,指定线程池执行器Executor 的bean,有如下解释:
* May be used to determine the target executor to be used when executing this
* method, matching the qualifier value (or the bean name) of a specific
* {@link java.util.concurrent.Executor Executor} or
* {@link org.springframework.core.task.TaskExecutor TaskExecutor}
* bean definition.
//必须为Executor或者TaskExecutor
所以需要定义一个getAsyncBean方法加上@Bean注解,否则使用默认的配置
同时该方法的类需要加上@EnableAsync 和 @Configuration 注解(@Async 需要和@EnableAsync 一起才能使用)
@EnableAsync 注解还可以添加在SpringBoot启动类
@Scheduled
使用方法
@SpringBootApplication中需要先添加@EnableScheduling注解- 在ScheduledTask类中添加
@Component注解,定时方法中添加@Scheduled注解即可
@Scheduled注解参数
fixedRatefixedDelaycronzoneinitialDelay