spring boot --- validator

本文介绍SpringBoot中Validator框架的应用,包括常用注解如@NotNull、@Min等,并演示了基本验证及自定义验证的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring boot — 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(regex=,flag=)被注释的元素必须符合指定的正则表达式
注解(Hibernate附加的 Validator)功能
@NotBlank(message =)验证字符串非null,且长度必须大于0
@Email被注释的元素必须是电子邮箱地址
@Length(min=,max=)被注释的字符串的大小必须在指定的范围内
@NotEmpty被注释的字符串的必须非空
@Range(min=,max=,message=)被注释的元素必须在合适的范围内

一、基本验证

  • 代码1
/*新建一个加验证的实体类用*/
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.Pattern;

public class DemoModel {

    @NotBlank(message="用户名不能为空")
    private String name;

    @NotNull(message="生日不能为空")
    @Pattern(regexp="^[0-9]{4}-[0-9]{2}-[0-9]{2}$",message="出生日期格式不正确")
    private String birthday;

    @Max(value=10,message="最大值不能大于10")
    private String maxValue;

    @Min(value=5,message="最小值不能小于5")
    private String minValue;

    @NotBlank
    @Length(max = 4,min = 2,message = "长度应该在2-4之间")
    private String lengthValue;

    ...省略geter/setter
}
  • 代码2
/*Controller*/
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("valBean/")
public class ValidateBeanController {

@RequestMapping("demo")
public void demo2(@Valid DemoModel demo, BindingResult result){
    System.out.println("**********开始demo2**********" + new Date());
    //如果验证通不过的处理
    if(result.hasErrors())
    {
        List<FieldError> fieldErrors=result.getFieldErrors();
        for (FieldError error : fieldErrors)
        {
            //打印错误
            System.out.println("字段名:"+error.getField()+",值:"+error.getRejectedValue()+",异常信息:"+error.getDefaultMessage());
        }
    }
    System.out.println("**********结束demo2**********" + new Date());
}
测试链接:http://localhost:8080/test/valBean/demo?name=&birthday=&maxValue=1
控制台输出:
**********开始demo2**********Mon Feb 05 17:47:38 CST 2018
字段名:minValue,值:null,异常信息:不能为null
字段名:birthday,值:,异常信息:出生日期格式不正确
字段名:lengthValue,值:null,异常信息:不能为空
字段名:name,值:,异常信息:用户名不能为空
字段名:maxValue,值:11,异常信息:最大值不能大于10
**********结束demo2**********Mon Feb 05 17:47:38 CST 2018

二、自定义验证

  • 代码3

新建一个annotation接口类

import aaa.annotation.validator.MoneyValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MoneyValidator.class ) //对应代码4的实现类
public @interface Money {

    String message() default "金额应为非负数,最多保留小数点后两位!";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

  • 代码4

新建一个接口实现类

/*
 * Moblie对应代码3的接口类
 * RegexpUtil.MOBILE_REGEXP 正则表达式
 * 也可以不用正则,用代码进行判断,返回结果是boolean即可
 */
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class MoblieValidator implements ConstraintValidator<Moblie,Object> 
{

    @Override
    public void initialize(Moblie moblie) {
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
        if (!RegexpUtil.isValidate((String)value, RegexpUtil.MOBILE_REGEXP)) {
            return false;
        }
        return true;
    }
}
控制台输出:
**********开始demo2**********Tue Feb 06 09:37:48 CST 2018
字段名:money,值:null,异常信息:金额应为非负数,最多保留小数点后两位!
字段名:lengthValue,值:null,异常信息:不能为空
字段名:birthday,值:888,异常信息:出生日期格式不正确
字段名:minValue,值:null,异常信息:不能为null
字段名:name,值:,异常信息:用户名不能为空
**********结束demo2**********Tue Feb 06 09:37:48 CST 2018


注意:测试时需要通过hppt请求,不能直接通过测试类调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值