在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

最新文章

  1. as的一些常见问题
  2. 夺命雷公狗---Thinkphp----15之遍历出来的栏目页的完成
  3. scan design flow(二)
  4. webstrom配置node环境一张图片说明问题
  5. c++事件内核对象(event)进程间激活(转)
  6. 如何在Android studio中同时打开多个工程? (转载)
  7. cocos2dx lua学习笔记 &amp;lt;一&amp;gt; quick 3.5定义本身C++类是必然lua
  8. Android 开发笔记 “android调试遇到ADB server didn&#39;t ACK以及顽固的sjk_daemon进程 ”
  9. Django 学习笔记(二)
  10. Hue集成Hadoop和Hive
  11. java_抽象类
  12. Linux并发连接上百万的配置
  13. ServiceStack.OrmLite T4模板使用记录
  14. centos 7查看防火墙报错(已解决,之前安装过python3)
  15. 关于angular 的路由title设置
  16. 数组-在Shell脚本中的基本使用介绍
  17. 读jQuery源码释疑笔记
  18. Android蓝牙BLE低功耗相关简单总结
  19. STL——仿函数(函数对象)
  20. 关于String str =new String(&quot;abc&quot;)和 String str = &quot;abc&quot;的比较--转

热门文章

  1. 01背包问题(dfs+剪枝)
  2. rustup 使用
  3. Loj刷题记录
  4. 洛谷P2877 [USACO07NOV]防晒霜Sunscreen
  5. 了解Python-白 驹 过 隙 , 忽 然 而 已
  6. 关于移动虚拟机后,linux网卡启动异常问题解决
  7. mysql round()函数以及convert()函数,保留n位小数
  8. SSH框架整合3——原生态SessionFactory
  9. Runtime Only和Runtime + Compiler
  10. Jmeter常用插件:梯度加压/插件管理器