Skip to content
鼓励作者:欢迎打赏犒劳

参数校验工具类

validator参数校验

  • @NotNull:不能为null,但可以为empty(""," ")
  • @NotEmpty:不能为null,而且 字符串/集合 长度必须大于0 (" "," ")
  • @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0

下面的表格整理自validation-api-2.0.0.Final.jar

Constraint详细信息
@AssertFalse该值必须为False
@AssertTrue该值必须为True
@DecimalMax(value,inclusive)被注释的元素必须是一个数字,其值必须小于等于指定的最大值 ,inclusive表示是否包含该值
@DecimalMin(value,inclusive)被注释的元素必须是一个数字,其值必须大于等于指定的最小值 ,inclusive表示是否包含该值
@Digits限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Email该值必须为邮箱格式
@Future被注释的元素必须是一个将来的日期
@FutureOrPresent被注释的元素必须是一个现在或将来的日期
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Negative该值必须小于0
@NegativeOrZero该值必须小于等于0
@NotBlank该值不为空字符串,例如“     ”
@NotEmpty该值不为空字符串
@NotNull该值不为Null
@Null该值必须为Null
@Past被注释的元素必须是一个过去的日期
@PastOrPresent被注释的元素必须是一个过去或现在的日期
@Pattern(regexp)匹配正则
@Positive该值必须大于0
@PositiveOrZero该值必须大于等于0
@Size(min,max)数组大小必须在[min,max]这个区间

另外hibernate的validator包hibernate-validator-6.0.2Final.jar中,又扩展了一些校验

Constraint详细信息
@CNPJCNPJ是巴西联邦税务局秘书处向巴西公司发放的身份证号码,这个注解校验的就是该号码
@CreditCardNumber(ignoreNonDigitCharacters=)被注释的字符串必须通过 Luhn 校验算法,银行卡,信用卡等号码一般都用 Luhn 计算合法性
@Currency(value=)被注释的 javax.money.MonetaryAmount 货币元素是否合规
@DurationMax(days=, hours=, minutes=, seconds=, millis=, nanos=, inclusive=)被注释的元素不能大于指定日期
@DurationMin(days=, hours=, minutes=, seconds=, millis=, nanos=, inclusive=)被注释的元素不能低于指定日期
@EAN被注释的元素是否是一个有效的 EAN 条形码
@Length(min=, max=)被注释的字符串的大小必须在指定的范围内
@LuhnCheck(startIndex= , endIndex=, checkDigitIndex=, ignoreNonDigitCharacters=)Luhn 算法校验字符串中指定的部分
@Mod10Check(multiplier=, weight=, startIndex=, endIndex=, checkDigitIndex=, ignoreNonDigitCharacters=)Mod10 算法校验
@Mod11Check(threshold=, startIndex=, endIndex=, checkDigitIndex=, ignoreNonDigitCharacters=, treatCheck10As=, treatCheck11As=)Mod11 算法校验
@Range(min=, max=)被注释的元素必须在合适的范围内
@SafeHtml(whitelistType= , additionalTags=, additionalTagsWithAttributes=, baseURI=)classpath中要有jsoup包,校验是否为安全html,即无注入信息
@ScriptAssert(lang=, script=, alias=, reportOn=)检查脚本是否可运行
@URL(protocol=, host=, port=, regexp=, flags=)被注释的字符串必须是一个有效的url

依赖

xml
<!--jsr 303-->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<!-- hibernate validator-->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.0.Final</version>
</dependency>

java实现

实体类

java
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Pattern;

@Data
public class CustomerRegisterDTO {
    /**
     * 账号
     */
    @Length(max = 10,min = 3,message = "账号必须大于3字符小于10字符")
    @NotBlank(message = "账号不能为空")
    private String account;

    /**
     * 密码
     */
    @NotBlank(message = "密码不能为空")
    private String password;

    /**
     * 邮箱
     */
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不对")
    private String email;


    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
    private String phoneNumber;

    @Range(min = 0,max = 2,message = "用户性别参数有误 用户性别(0男 1女 2未知)")
    @NotEmpty(message = "用户性别不能为空")
    private String sex;
}

controller层

java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("api/portal/customer")
public class CustomerControllerAPI{

    @Autowired
    private ICustomerService customerService;

    @ApiOperation(value="注册用户")
    @PostMapping("/register")
    public ResultInfoVO<Void> register(@RequestBody @Validated CustomerRegisterDTO dto){
        customerService.register(dto);
        return ResultInfoVOUtil.buildSuccess();
    }
}

返回结果

json
{
    "success": false,
    "code": -1,
    "message": "{\"email\":\"邮箱格式不对\"}",
    "data": null
}

如有转载或 CV 的请标注本站原文地址