后端参数校验:通过对实体添加注解——Hibernate validator

官方文档:建议自己阅读下官方文档,很详细,网上很多其它的都是断章取义。

Hibernate Validator

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群里会有很多热心的小伙伴,大家一起讨论解决问题。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值