spring 中对实体类字段校验注解@Valid 说明及使用

先看下注释说明:

注解说明
@Null限制只能为null
@NotNull限制必须不为null
@AssertFalse限制必须为false
@AssertTrue限制必须为true
@DecimalMax(value)限制必须为一个不大于指定值的数字
@DecimalMin(value)限制必须为一个不小于指定值的数字
----
@Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future限制必须是一个将来的日期
@Max(value)限制必须为一个不大于指定值的数字
@Min(value)限制必须为一个不小于指定值的数字
@Past限制必须是一个过去的日期
@Pattern(value)限制必须符合指定的正则表达式
----
@Size(max,min)限制字符长度必须在min到max之间
@Past验证注解的元素值(日期类型)比当前时间早
@NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
@Range被注释的元素必须在合适的范围内
----
@CreditCardNumber对信用卡号进行一个大致的验证

解释很简单,可以直接使用,但需要注意几种使用场景

如果是普通spring项目需要引入依赖:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
 
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.Final</version>
</dependency>

如果你是springboot项目,则无需这样做,因为它里面已经自带了

实体类中可以直接使用:

package com.***;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
@Data
public class User{
    /** 信息集合*/
    @NotEmpty(message = "信息集合不能为空")
    @Size(max=5,message="最大长度为5")//此处则表示集合个数不能超过5个
    private List<Message> messages;

    /** 业务订单号*/
    @NotBlank(message = "业务订单号不能为空")
    @Length(message = "业务订单号长度不能大于{max}", max = 20)
    //@Size(max=10,message="最大长度为10")  此注解跟 @Length 在此处效果一样都是校验字符串长度的,二选一即可
    private String orderNo;

    /** 业务类型,1:测试;2:实操*/
    @NotNull(message = "业务类型不能为空")
    @Range(message = "业务类型数据只能为{min}跟{max}", min = 1, max = 2)
    private int taskType;

    /** 创建时间*/
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "创建时间不能为空")
    private Date CreateTime;
}

实体类中以上几种注解可以概括大部分场景

controller层:

public class UserController {
 
	@PostMapping("/add")
	public String add(@RequestBody @Valid User user,BindingResult bindingResult) {
		if (bindingResult.hasErrors()){
		return bindingResult.getFieldError().getDefaultMessage();
		//return bindingResult.getAllErrors().get(0).getDefaultMessage();  此方法与上面返回效果一样,可二选一
		}
	}
}

注意:

  1. BindingResult 需跟 @Valid配套使用, 且一定要在 校验参数后面使用否则 无效
  2. 如果报参数类型错误可根据上面注释说明查看 注解所对应字段类型是否符合规范
  3. 如果报 时间转换解析异常 按上面实体类中 时间字段上 加上@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”) 即可,注意对应你自己的格式 pattern
  4. 以上内容是本人从各大文章 整理过来的,很多注解没有做 一 一验证,如果不对请指出
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值