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

如何让Javax Validation同时校验子类与父类?

解决Spring Controller继承校验问题

问题现象

使用Spring开发时,Controller方法中用@Valid校验子类PayDetail.Request时,仅能校验子类自身的字段,父类CommReqForm的字段校验不生效。

解决方案

可以通过以下几种方式解决:

1. 替换@Valid为@Validated

将Controller参数上的@Valid替换为Spring扩展的@Validated注解,它能正确识别并校验父类继承的字段:

@PostMapping("/pay/detail")
public ResponseEntity<PayDetail.Response> getPayDetail(
    @Validated PayDetail.Request payDetail
) {
    // ...业务逻辑
}

2. 在父类添加@Valid类级注解

在父类CommReqForm的类级别添加@Valid注解,触发对父类字段的递归校验:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Valid // 添加该注解
public class CommReqForm {
    @NotEmpty(message = "servicecode not empty")
    private String servicecode;

    @NotEmpty(message = "reqtype not empty")
    private String reqtype; 
}

3. 在子类添加@Valid类级注解

也可以在子类PayDetail.Request的类级别添加@Valid注解,同样能触发对父类字段的校验:

public class PayDetail {    
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @Valid // 添加该注解
    public static class Request extends CommReqForm {
        @NotNull(message = "Not null please")
        private String work_type;
    }
}

注意事项

  • 确保项目中已引入校验依赖:如果是Spring Boot项目,需引入spring-boot-starter-validation;非Spring Boot项目需引入hibernate-validator及相关依赖。
  • 校验注解(如@NotEmpty、@NotNull)本身不需要额外配置,Bean Validation规范会处理继承字段的校验逻辑,上述方法是确保Spring MVC能正确触发全字段校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:25:43