一、什么是Hibernate  Validator(效验/验证)

在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,如果我们直接将这些校验写死在代码里,将会遇到这种现象: 1. 验证代码繁琐,重复劳动 2. 方法内代码显得冗长 3. 代码可读性不高

所以,我们可以使用hibernate validator来对字段的校验工作统一完成。

二、项目集成注意事项

在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 。

三、常用注解

validator内置注解

注解

详细信息

@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(value)

被注释的元素必须符合指定的正则表达式

Hibernate Validator 附加的 constraint
注解

详细信息

@Email

被注释的元素必须是电子邮箱地址

@Length

被注释的字符串的大小必须在指定的范围内

@NotEmpty

被注释的字符串的必须非空

@Range

被注释的元素必须在合适的范围内

@NotBlank

验证字符串非null,且长度必须大于0

注意:

@NotNull 适用于任何类型被注解的元素必须不能与NULL
@NotEmpty 适用于String Map或者数组不能为Null且长度必须大于0
@NotBlank 只能用于String上面 不能为null,调用trim()后,长度必须大于0

 

四、使用案例

import com.shida.api.baseData.validatorUtils.IsMobile;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

public class AccountVO implements Serializable {

    /**
     * 手机号
     */
    @IsMobile
    private String account;

    /**
     * 密码
     */
    @NotNull
    @Length(min = 1 , max = 6 , message = "密码不能为空且长度需要在1和6之间")
    private String password;

    /**
     * 账户状态
     */
    @NotNull(message = "账号状态不能为空")
    private Integer status;

    /**
     * 账户扩展信息
     */
    @Valid
    private UserInfoVO userInfoVO;

    public String getAccount() {return account;}

    public void setAccount(String account) {this.account = account;}

    public String getPassword() {return password;}

    public void setPassword(String password) {this.password = password;}

    public Integer getStatus() {return status;}

    public void setStatus(Integer status) { this.status = status;}

    public UserInfoVO getUserInfoVO() {return userInfoVO;}

    public void setUserInfoVO(UserInfoVO userInfoVO) {this.userInfoVO = userInfoVO;}
}

 

package com.shida.account.center.controller;


import com.base.data.common.message.MessageVo;
import com.base.data.common.message.StatusCode;
import com.shida.account.center.service.IAccountService;
import com.shida.api.baseData.model.AccountVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;

@RestController
@Validated
@RequestMapping("/data/account")
public class AccountController {

    @Resource
    private IAccountService accountService;

    /**
     * 添加账户
     * @param accountVO
     * @return
     */
    @PostMapping(value = "/add")
    public MessageVo addAccount(@Valid @RequestBody AccountVO accountVO){
        MessageVo message = new MessageVo();
        accountService.addAccount(accountVO);
        message.setCode(StatusCode.success);
        message.setMsg("账户添加成功");
        message.setResult(accountVO);
        return message;
    }
}
最后修改于 2020-08-27 11:02:55
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇