You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot如何实现min与max关联字段的联合校验?

Spring Boot 跨字段关联参数校验实现方案

这种涉及两个字段关联的校验规则,无法通过JSR-380(Bean Validation)提供的单字段注解实现,需要自定义类级别的校验注解完成,具体步骤如下:

  • 步骤1:定义自定义校验注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MaxGreaterThanMinValidator.class)
public @interface MaxGreaterThanMin {
    // 校验失败默认提示信息
    String message() default "max取值必须大于min";

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

    Class<? extends Payload>[] payload() default {};
}
  • 步骤2:编写校验逻辑实现类
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MaxGreaterThanMinValidator implements ConstraintValidator<MaxGreaterThanMin, Clazz> {
    @Override
    public boolean isValid(Clazz clazz, ConstraintValidatorContext context) {
        // 若字段为null可根据业务需求调整逻辑,这里默认min已通过@Min校验有有效值
        if (clazz.getMin() == null || clazz.getMax() == null) {
            return true;
        }
        boolean isValid = clazz.getMax() > clazz.getMin();
        // 可选:将校验错误信息绑定到max字段上,而非类级别
        if (!isValid) {
            context.disableDefaultConstraintViolation();
            context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate())
                    .addPropertyNode("max")
                    .addConstraintViolation();
        }
        return isValid;
    }
}
  • 步骤3:给实体类添加自定义校验注解
import javax.validation.constraints.Min;

@MaxGreaterThanMin
public class Clazz{
    // 注意@Min的value为数值类型,无需加引号
    @Min(value = 0)
    private Integer min;
    
    private Integer max;

    // 省略getter、setter方法
}

注意:实体类的字段建议使用包装类型Integer而非基础类型int,避免基础类型默认值0导致的非预期校验问题。

  • 步骤4:触发校验
    在Controller接口的实体参数前添加@Valid或@Validated注解即可自动触发校验规则:
@PostMapping("/test")
public String test(@Valid @RequestBody Clazz clazz) {
    // 业务逻辑
    return "success";
}

内容的提问来源于stack exchange,提问作者majid_shoorabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:24:04