前言:
validation主要用于校验用户提交的数据的合法性,比如字符长度,是否为空,密码是否符合规则,邮箱格式是否正确等等,市场上校验框架比较多,用的比较广泛的是hibernate-validator, 既支持国际化,也支持自定义校验类型的注解,这里简单的演示校验框架在Springboot中如何集成。
第一步:添加pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
第二步:添加实体类代码(注意:实体类中一定要加get/set方法,或lombok的@Data注解,否则controller中的register()方法拿到参数后无法赋值给User对象)
package com.ryi.rpcs.test;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
/**
* 用户实体类
* https://www.jiagou1216.com
*/
@Data
public class User {
private Long id;
@NotBlank
@Length(min = 3, max = 10)
private String username;
@NotBlank
@Email
private String email;
@NotBlank
@Pattern(regexp = "^((13[0-9])|(15[^4,\\D])|(18[0,3-9]))\\d{8}$", message = "手机号格式不正确")
private String phone;
@Min(value = 18)
@Max(value = 200)
private int age;
@NotBlank
@Length(min = 6, max = 12, message = "昵称长度为6到12位")
private String url;
}
第三步:添加controller控制类
package com.ryi.rpcs.test;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* 控制类
*
* @author 架构师小跟班
*/
@RestController
@RequestMapping("/demo")
public class DemoController {
@PostMapping("/user")
public String register(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
FieldError fieldError = result.getFieldError();
String field = fieldError.getField();
String msg = fieldError.getDefaultMessage();
return field + ":" + msg;
}
System.out.println("success...");
return "success";
}
}
第四步:使用postman测试,选择post方法,请求URL:localhost:8080/demo/user
拓展阅读:
常用的约束注解
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
@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包