异常处理 声明式异常处理
/**
- 1.全局异常发生,会走此类写的handler!
- @RestControllerAdvice = @ControllerAdvice + @ResponseBody
- @ControllerAdvice 代表当前类的异常处理controller! 是可以返回逻辑视图 转发和重定向
找视图页面的话 返回对应的字符串 return "home";
- @ResponseBody 直接返回json字符串
- 2.扫描controller对应的包,将handler加入到ioc
- @ComponentScan(basePackages = {"com.atguigu.controller",
- "com.atguigu.exceptionhandler"})
- 3.理解 发生异常 -》 ControllerAdvice 注解的类型 -》 @ExceptionHandler(指定的异常) -> handler
- 写方法 指定的异常 可以精准查找,或者查找父异常
- @ExceptionHandler(NullPointerException.class)
*/
拦截器方法拦截位置:
image.png
拦截器 aop 思维
image.png
源码解释
DispatcherServlet
image.png image.png image.png
三 .参数校验
@Data
public class User {
//age 1 <= age < = 150
@Min(10)
private int age;
//name 3 <= name.length <= 6
@Length(min = 3,max = 10)
private String name;
//email 邮箱格式
@Email
private String email;
}
/***
|@Null|标注值必须为 null|
|@NotNull|标注值不可为 null|
|@AssertTrue|标注值必须为 true|
|@AssertFalse|标注值必须为 false|
|@Min(value)|标注值必须大于或等于 value|
|@Max(value)|标注值必须小于或等于 value|
|@DecimalMin(value)|标注值必须大于或等于 value|
|@DecimalMax(value)|标注值必须小于或等于 value|
|@Size(max,min) |标注值大小必须在 max 和 min 限定的范围内|
|@Digits(integer,fratction)|标注值值必须是一个数字,且必须在可接受的范围内|
|@Past|标注值只能用于日期型,且必须是过去的日期|
|@Future|标注值只能用于日期型,且必须是将来的日期|
|@Pattern(value)|标注值必须符合指定的正则表达式|
|@Email|标注值必须是格式正确的 Email 地址|
|@Length|标注值字符串大小必须在指定的范围内|
|@NotEmpty|标注值字符串不能是空字符串|
|@Range |标注值必须在指定的范围内|
- 校验注解实现 /
- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator/
-
https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator-annotation-processor
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>8.0.0.Final</version>
</dependency>
// * |用户更新|PUT /user|{ user 更新数据}|{响应数据}|
@PostMapping("user/updateUserInfo")
@ResponseBody
public Object updateUserInfo(@Validated @RequestBody User user , BindingResult result){
if(result.hasErrors()){
HashMap hashMap = new HashMap();
hashMap.put("code","1");
hashMap.put("msg","参数校验异常");
return hashMap;
}else {
//更新数据库事务
if(user.getName().equals("1")){
user.setAge(18);
user.setName("sdf");
}
return user;
}
}
*/
网友评论