demo
实体类
public class UserBean {
@NotBlank(message="用户名不能为空")
private String userName;
@NotBlank(message="年龄不能为空")
@Pattern(regexp="^[0-9]{1,2}$",message="年龄不正确")
private String age;
@AssertFalse(message = "必须为false")
private Boolean isFalse;
/**
* 如果是空,则不校验,如果不为空,则校验
*/
@Pattern(regexp="^[0-9]{4}-[0-9]{2}-[0-9]{2}$",message="出生日期格式不正确")
private String birthday;
}
测试;
@RestController
@RequestMapping("/vh")
public class ValidatorController {
@RequestMapping("/resign")
public String resign(@RequestBody @Valid UserBean user ) {
return "success";
}
}
如果校验通不过返回这样的报文:
这种方式返回的报文不能控制,我们来看第二种方案:
工具类;
public class ValidatorUtils {
private static Validator validator;
static {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
/**
* 校验对象
* @param object 待校验对象
* @throws RuntimeException 校验不通过,则报RuntimeException异常
*/
public static void validateEntity(Object object)
throws RuntimeException {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object);
if (!constraintViolations.isEmpty()) {
ConstraintViolation<Object> constraint = constraintViolations.iterator().next();
throw new RuntimeException(constraint.getMessage());
}
}
}
测试:
@RestController
@RequestMapping("/vh")
public class ValidatorController {
@RequestMapping("/resign")
public String resign(@RequestBody @Valid UserBean user ) {
ValidatorUtils.validateEntity(user);
return "success";
}
}
附录:
注解说明:
注解 | 支持的数据类型 | 作用 |
---|---|---|
@AssertFalse | Boolean, boolean | 值等于false |
@AssertTrue | Boolean, boolean | 值等于true |
@Future | java.util.Date 等 | 检查给定的日期比当前日期晚. |
@Past | java.util.Date 等 | 检查给定的日期比当前日期早. |
@Max | BigDecimal, BigInteger, byte, short, int, long 以及包装类 | 检查该值是否小于或等于约束条件中指定的最大值. |
@Min | BigDecimal, BigInteger, byte, short, int, long 以及包装类 | 检查该值是否大于或等于约束条件中指定的最小值. |
@NotNull | 任意类型 | 带注释的值不为null. |
@Null | 任意类型 | 带注释的值为null. |
@Pattern(regex=, flag=) | String | 检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配. |
@Size(min=, max=) | String,Collection,Map,array | 检查带注释的元素的大小是否在最小值和最大值之间. |
@Valid | 任何引用数据类型 | |
@CreditCardNumbe | String | 检查信用卡号 |
String | 检查指定的字符串是否为有效的电子邮件地址。 | |
@Length(min=, max=) | String | 确认带注释的字符串在min和max之间. |
@NotBlank | String | 值不为null 切不为"", 不为" " |
@NotEmpty | String,Collection,Map,array | 值不为null 或者没有值 |
@Range(min=, max=) | BigDecimal,String, BigInteger, byte, short, int, long 以及包装类 | 值是否位于(包含)指定的最小值和最大值之间。 |
@SafeHtml(whitelistType=, additionalTags=) | 检查带注释的值是否包含潜在的恶意片段,如脚本/。为了使用这个约束,jsoup库必须是类路径的一部分。可以选择whitelistType属性预定义白名单类型。您还可以使用additionalTags属性为白名单指定额外的html标记。 | |
@URL(protocol=, host=, port=, regexp=, flags=) | String | 根据RFC2396,检查带注释的字符串是否是有效的URL。如果指定了任何可选参数协议、主机或端口,相应的URL片段必须匹配指定的值。可选参数regexp和旗帜允许指定URL必须匹配的额外正则表达式(包括正则表达式标志)。 |