目录
其他链接说明:
1、springMVC配置全局捕获请查看本人此博客
2、解决hibernate-validator使用@Valid注解校验集合list时失效问题 请查看本人此博客
JSR303介绍
JSR 是Java Specification Requests的缩写,意为Java规范请求,是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现。
Hibernate Validator官网地址:http://hibernate.org/validator/
Hibernate Validator常用注解
注解 | 说明 |
---|---|
@Null | 限制只能为null |
@NotNull | 限制必须不为null |
@AssertFalse | 限制必须为false |
@AssertTrue | 限制必须为true |
@DecimalMax(value) | 限制必须为一个不大于指定值的数字 |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future | 限制必须是一个将来的日期 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Past | 限制必须是一个过去的日期 |
@Pattern(value) | 限制必须符合指定的正则表达式 |
@Size(max,min) | 限制字符长度必须在min到max之间 |
@Past | 验证注解的元素值(日期类型)比当前时间早 |
@NotEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 | |
@Length | 被注释的字符串的大小必须在指定的范围内; |
@NotEmpty | 被注释的字符串必须非空; |
@Range | 被注释的元素必须在合适的范围内。 |
更多内容可查询jar包:
springMVC整合Hibernate Validator
1、导入maven依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
2、修改springMVC配置文件
<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
</bean>
3、编写验证实体
具体实体就不贴代码了,如下图,在需要校验的字段上方新增对应注解即可。
4、编写Controller
只需要在需要验证的实体前加@Valid注解即可,也可以使用@Validated
@Validated是对@Valid的封装,@Validated是提供分组功能
5、全局异常捕获
springMVC配置全局捕获请查看本人此博客:https://blog.csdn.net/qq_34497272/article/details/115726055
/**
* 参数校验
*/
@ExceptionHandler(value = {MethodArgumentNotValidException.class,BindException.class})
@ResponseBody
public MessageResult bindException(Exception e) {
MessageResult result = new MessageResult();
// 参数校验异常
BindingResult bindingResult;
if (e instanceof MethodArgumentNotValidException){
bindingResult = ((MethodArgumentNotValidException)e).getBindingResult();
}else {
bindingResult = ((BindException)e).getBindingResult();
}
String errorMesssage = "校验失败:";
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorMesssage += fieldError.getDefaultMessage() + ",";
// 错误字段名,若需要错误字段名,也可将错误字段名返回
// fieldError.getField();
}
result.setSuccess(Boolean.FALSE);
result.setCode(MessageResultCode.PARAM_ERROR.getCode());
result.setMsg(errorMesssage);
return result;
}