官方文档:建议自己阅读下官方文档,很详细,网上很多其它的都是断章取义。
Hibernate Validator 6.0.13.Final - JSR 380 Reference Implementation: Reference Guide
一、引入依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
二、在实体类上添加注解,进行参数校验(Entity层)
public class Foo {
@NotBlank
private String name;
@Min(18)
private Integer age;
@Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
@NotBlank(message = "手机号码不能为空")
private String phone;
@Email(message = "邮箱格式错误")
private String email;
//... getter setter
}
给我们提供了哪些校验方法
JSR提供的校验注解:
@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提供的校验注解:
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
三、controller层,对实体Foo添加@Validated。注意,一定是在实体前面添加。
@Controller public class FooController
{
@RequestMapping("/foo")
public String foo(@Validated Foo foo <1>, BindingResult bindingResult <2>) {
if(bindingResult.hasErrors()){
for (FieldError fieldError : bindingResult.getFieldErrors()) {
//...
}
return "fail";
}
return "success";
}
}
四、就完成了。
返回的结果大概是这个样子的:
ValidateResult [result=false, errMsg=[<strong>userModel校验出错:["userName不能为空"]</strong>, address不能为空, sex值不合法]]
最后 ,我没有用这种方法。原因是:1、我们项目框架的返回码是:{code:0,msg:"success"}形式的,这种返回的返回码是,如上结果。很麻烦,相当于,我还要将这个返回的返回码set到我自己的返回码格式当中,然后就很冗余了。反正我觉得很麻烦。机没有用这种方式。2、就是实体,很多地方用到了,我这样做校验是防止web端的一些参数,但是移动端也是用这块的实体,我怕会有问题,虽然我也不知道会有什么问题。
参考文档:
你是技术宅么?那就加入我们吧!点击下方链接 或 扫描二维码 即可。
欢迎加入 CSDN技术交流群2:(点击即可加群)QQ群:456543087
CSDN技术交流群(已满员):(点击即可加群)QQ群:681223095。
商务合作@群主,谢谢!
因经常有人留言,未能及时查看到和回复,所以特建此群,以方便交流。方便问题讨论,有问题和没有问题的小伙伴均可加入,用作自我学习和共同进步。本博主不一定长期在线,但是qq群里会有很多热心的小伙伴,大家一起讨论解决问题。