Springboot采用hibernate-validate验证请求参数
2024-08-29 03:36:27
在springboot项目使用hibernate-validate对请求参数添加注解进行校验
常用注解
@Null
,标注的属性值必须为空
@NotNull
,标注的属性值不能为空
@AssertTrue
,标注的属性值必须为true
@AssertFalse
,标注的属性值必须为false
@Min
,标注的属性值不能小于min中指定的值
@Max
,标注的属性值不能大于max中指定的值
@DecimalMin
,小数值,同上
@DecimalMax
,小数值,同上
@Negative
,负数
@NegativeOrZero
,0或者负数
@Positive
,整数
@PositiveOrZero
,0或者整数
@Size
,指定字符串长度,注意是长度,有两个值,min以及max,用于指定最小以及最大长度
@Digits
,内容必须是数字
@Past
,时间必须是过去的时间
@PastOrPresent
,过去或者现在的时间
@Future
,将来的时间
@FutureOrPresent
,将来或者现在的时间
@Pattern
,用于指定一个正则表达式
@NotEmpty
,字符串内容非空
@NotBlank
,字符串内容非空且长度大于0
@Email
,邮箱
@Range
,用于指定数字,注意是数字的范围,有两个值,min以及max
使用方法
修改默认的验证策略
@Configuration
public class ValidatorConfig { @Bean
public Validator validator() {
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
//该配置的意思是,有一个验证失败就立刻返回,不用等到所有的都验证完
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return factory.getValidator();
}
}
异常捕获
@RestControllerAdvice
public class GlobalExceptionHandler { //这里处理@RequestBody ,验证不通过抛出的异常
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultInfo<?> validationErrorHandler(MethodArgumentNotValidException ex) {
List<String> errorInformation = ex.getBindingResult().getAllErrors()
.stream()
.map(ObjectError::getDefaultMessage)
.collect(Collectors.toList());
return new ResultInfo<>(, errorInformation.get().toString(), null);
} //这里是处理 @PathVariable和@RequestParam 验证不通过抛出的异常
@ExceptionHandler(ConstraintViolationException.class)
public ResultInfo<?> validationErrorHandler(ConstraintViolationException ex) {
List<String> errorInformation = ex.getConstraintViolations()
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.toList());
return new ResultInfo<>(, errorInformation.toString(), null);
}
}
controller层
@RestController
@RequestMapping("/users")
@Validated
public class UserController { @PostMapping("/addUser")
public User addUser(@Valid @RequestBody User user) {
// 仅测试验证过程,省略其他的逻辑
return user;
} @GetMapping("/{name}/detail")
public User getUserByName(
@NotNull
@Size(min = , max = , message = "用户名格式有误")
@PathVariable String name) {
User user = new User();
user.setName(name);
return user;
} @GetMapping("/getName/detail")
public User getUserByNameParam(
@NotNull
@Size(min = , max = , message = "用户名格式有误")
@RequestParam("name") String name) {
User user = new User();
user.setName(name);
return user;
}
}
github下载地址:https://github.com/jake1263/hibernate-validate
最新文章
- as的一些常见问题
- 夺命雷公狗---Thinkphp----15之遍历出来的栏目页的完成
- scan design flow(二)
- webstrom配置node环境一张图片说明问题
- c++事件内核对象(event)进程间激活(转)
- 如何在Android studio中同时打开多个工程? (转载)
- cocos2dx lua学习笔记 &;lt;一&;gt; quick 3.5定义本身C++类是必然lua
- Android 开发笔记 “android调试遇到ADB server didn&#39;t ACK以及顽固的sjk_daemon进程 ”
- Django 学习笔记(二)
- Hue集成Hadoop和Hive
- java_抽象类
- Linux并发连接上百万的配置
- ServiceStack.OrmLite T4模板使用记录
- centos 7查看防火墙报错(已解决,之前安装过python3)
- 关于angular 的路由title设置
- 数组-在Shell脚本中的基本使用介绍
- 读jQuery源码释疑笔记
- Android蓝牙BLE低功耗相关简单总结
- STL——仿函数(函数对象)
- 关于String str =new String(";abc";)和 String str = ";abc";的比较--转