Springboot参数分组校验
简介
Java API
规范(JSR303)定义了Bean校验的标准validation-api
,但没有提供实现。hibernate validation
是对这个规范的实现,并增加了校验注解如@Email
、@Length
等。
Spring Validation
是对hibernate validation
的二次封装,用于支持spring mvc参数自动校验。本文基于 JDK21 和 springboot3.1.5 进行整理。
代码准备
参数校验对象,以下实例都基于该对象进行。
package com.lzhch.practice.dto.req;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 参数分组校验入参
* <p>
* author: lzhch
* version: v1.0
* date: 2023/11/20 15:36
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ParamGroupValidatedReq implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 用户ID
* 内部定义接口和统一定义接口任选其一即可
*/
// @NotNull(message = "用户id不能为空", groups = ParamGroupValidated.Create.class)
@NotNull(message = "用户id不能为空") // Service 层不进行分组校验
// @NotNull(message = "用户id不能为空", groups = ParamGroupValidatedReq.Save.class)
private Long userId;
/**
* 用户名
*/
@NotBlank(message = "用户名不能为空")
@Length(max = 20, message = "用户名不能超过20个字符")
private String username;
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空")
private String mobile;
/**
* 性别
*/
private String sex;
/**
* 邮箱
*/
@NotBlank(message = "联系邮箱不能为空")
@Email(message = "邮箱格式不对")
private String email;
/**
* 密码
*/
private St