前言
使用一些注解能显著提升我们的开发效率!
1.@SpringBootApplication
@SpringBootApplication可以看做是@Configuration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合注解。
@Configuration:允许在上下文中注册额外的bean或者导入其他的配置类
@EnableAutoConfiguration:启用SpringBoot的自动配置机制
@ComponentScan:扫描被@Component(@Service,@Controller)注解的Bean,默认会扫描该类所在包下所有的类。这也是证明为什么被@SpringBootApplication注解的类,都在包的最高级目录。
2.@RestController
该注解为@Controller和@ResponseBody的组合
3.@GetMapping,@PostMapping
@GetMapping等价于(@RequestMapping(method=RequestMethod.GET))
@PostMapping等价于(@RequestMapping(method=RequestMethod.POST))
其他的@PutMapping,@DeleteMapping也都与上面的类似
4.@PathVariable
使用url地址中的参数
eg: id为url请求中的参数,使用该注解即可获取该值
@GetMapping("/get/{id}")
public User getUserById(@PathVariable("id") Integer id){
return userService.getUserById(id);
}
5.@RequestParam
获取请求中指定的参数
6.@RequestBody
将请求中的Body体转换成对应的java对象
eg:
@PostMapping("/create")
public Integer createUser(@RequestBody User user){
return userService.createUser(user);
}
7.@ControllerAdvice
在实际的应用过程中我们需要对异常进行统一的处理,防止一些信息暴露给用户,此时就需要使用这个注解对全局的异常进行一个处理和包装。
该注解里面有一些参数,用于指定处理异常的范围。
指定一个或者多个Controller
@ControllerAdvice(assignableTypes = {MyController1.class,MyController2.class})
指定一个或者多个包,该包下及其子包下的所有Controller都会被指定异常处理
@COntrollerAdvice(basePackages = {"com.demo.example1", "com.demo.example2"})
指定一个或者多个Controller类所在的包及其子包下所有的Controller都会被指定的异常处理
@ControllerAdvice(basePackageClasses = {MyController1.class,MyController2.class})
指定一个或者多个注解,被这些注解所标记的Controller都会被指定的异常处理
@ControllerAdvice(annotations = {RestController.class})
8.@ExceptionHandler
处理全局异常
@ExceptionHandler(value = Exception.class)
处理指定的某一类异常
eg:只处理Spring Security中无权访问的异常
@ExceptionHandler(value = AccessDeniedException.class)
9.@ResponseStatus
将异常转化为对应的状态码。
eg:页面加入返回500错误,如果不做处理的话,还会返回报错信息,在使用该注解之后,只会返回500错误。
上述所示并不友好,只看到一个错误,并没有将异常和错误请求等信息显示出来,不利于我们排查错误,一般使用ResponseStatusException这个类来对异常进行处理,即可友好的提示,同时方便我们排查错误。
ResponseStatusException 有3个构造方法。
status : http status
reason :response 的消息内容
cause : 抛出的异常
public ResponseStatusException(HttpStatus status) {
this(status, null, null);
}
public ResponseStatusException(HttpStatus status, @Nullable String reason) {
this(status, reason, null);
}
public ResponseStatusException(HttpStatus status, @Nullable String reason, @Nullable Throwable cause) {
super(null, cause);
Assert.notNull(status, "HttpStatus is required");
this.status = status;
this.reason = reason;
}