作用
被注释的元素必须是电子邮箱地址
@Length(min=, max=)
被注释的字符串的大小必须在指定的范围内
@NotEmpty
被注释的字符串的必须非空
@Range(min=, max=)
被注释的元素必须在合适的范围内
被注释的字符串的必须非空
@URL(protocol=,
host=, port=,
regexp=, flags=)
被注释的字符串必须是一个有效的url
@CreditCardNumber
被注释的字符串必须通过Luhn校验算法 ,
银行卡,信用卡等号码一般都用Luhn
计算合法性
@ScriptAssert
(lang=, script=, alias=)
要有Java Scripting API 即JSR 223
("Scripting for the JavaTM Platform")的实现
@Safehtml
(whitelistType=,
additionalTags=)
classpath中要有jsoup包
参数基础校验参数的基础校验 , 通常是指的非空、长度、最大值、最小值、格式(数字、邮箱、正则)等这些场景的校验 。
@RequestBody参数1.在controller层的方法的形参数前面加一个@Valid或@Validated的注解;
2.在用@RequestBody修饰的类的属性上加上约束注解,如@NotNull、@Length、@NotBlank;
3.@RequestBody参数在触发校验规则时,会抛出MethodArgumentNotValidException , 这里使用统一的异常处理机制来处理异常;
总结:第1步的valid的作用就是一个标记,标明这个参数需要进行校验;第2步的约束注解的上注明校验的规则;第3步的统一校验机制是前后台请求后台接口时,如果校验参数的校验规则后会抛出异常,异常附带有约束注解上的提示信息,那么通过异常统一处理机制就可以统一处理异常信息,并以合适的方式返回给前台(所谓合适的方式是指异常信息的格式可以自行制定) 。
@PostMapping("/add")public Student add( @Valid@RequestBody Student student){System.out.println(student.getStuName());return student;}@Datapublic class Student{@NotNull(message = "学号不能为空")@Length(min = 2, max = 4, message = "学号的长度范围是(2,4)")private String stuCode;@NotNull(message = "姓名不能为空")@Length(min = 2, max = 3, message = "姓名的长度范围是(2,3)")private String stuName;}@RequestParam参数/@PathVariable参数1.在controller层的控制类上添加@Validated注解;
2.在controller层方法的校验参数上添加约束注解,如@NotNull、@Pattern;
3.@RequestParam参数/@PathVariable参数在触发校验规则时,会抛出ConstraintViolationException类型的异常,所以在统一异常处理机制中添加对这种类型异常的处理机制;
@RestController@RequestMapping("/student")@Validatedpublic class StudentController {@GetMapping("/{sex}/info")public String getBySex(@PathVariable("sex") @Pattern(regexp = "boy||girl",message = "学生性别只能是boy或girl") String sex) {System.out.println("学生性别:" + sex);return "success";}@GetMapping("/getOne")public String getOne(@NotNull(message = "学生姓名不能为空") String stuName, @NotNull(message = "学生学号不能为空") String stuCode) {System.out.println("stuName:" + stuName + ",stuCode:" + stuCode);return "success";}}异常统一处理@RestControllerAdvicepublic class CommonExceptionHandler {/*** 用于捕获@RequestBody类型参数触发校验规则抛出的异常** @param e* @return*/@ExceptionHandler(value = https://www.isolves.com/it/cxkf/jiagou/2023-11-29/MethodArgumentNotValidException.class)public String handleValidException(MethodArgumentNotValidException e) {StringBuilder sb = new StringBuilder();List allErrors = e.getBindingResult().getAllErrors();if (!CollectionUtils.isEmpty(allErrors)) {for (ObjectError error : allErrors) {sb.append(error.getDefaultMessage()).append(";");}}return sb.toString();}/*** 用于捕获@RequestParam/@PathVariable参数触发校验规则抛出的异常** @param e* @return*/@ExceptionHandler(value = ConstraintViolationException.class)public String handleConstraintViolationException(ConstraintViolationException e) {StringBuilder sb = new StringBuilder();Set> conSet = e.getConstraintViolations();for (ConstraintViolation> con : conSet) {String message = con.getMessage();sb.append(message).append(";");}return sb.toString();}} 嵌套校验在实际项目中有这样一种场景,用来接收参数的类的属性字段也是一个对象 , 属性对象的字段也需要进行必要的参数校验,这个时候可以使用嵌套校验来解决这个问题,hibernate-validator提供了具体的解决方式 。
推荐阅读
- JavaScript中的异步处理你知道哪些方法?你用对了吗?
- 一文详解分布式锁的看门狗机制
- Java的TreeMap底层实现原理?
- 你不知道的Websocket协议,这次给你讲明白!
- 解密 Python 如何调用 Rust 编译生成的动态链接库
- Java与MySQL大数据处理的技巧
- 解密Java连接MySQL的最佳实践:选择适合你的方式
- 系统设计概念:生产 Web 应用的架构
- 桃花最佳观赏时间是什么时候 桃花的最佳观赏期是几月几日
- 抖音上的商务合作是什么意思呀 抖音上的商务合作是什么意思
