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

OpenAPI Generator在String集合上生成@Valid注解是否合理?

问题:String集合上添加@Valid注解是否正确?

环境信息

  • Spring 3.4.1
  • Java 21.0.5
  • openapi-generator-maven-plugin 7.10.0

定义的OpenAPI YAML

Role:
  type: object
  properties:
    id:
      type: integer
      format: int64
    description:
      type: string
      minLength: 3
      maxLength: 20
    users:
      type: array
      items:
        type: string
  required:
    - description

生成的Role类代码

@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2025-02-05T10:09:59.616364500+01:00[Europe/Rome]", comments = "Generator version: 7.10.0")
public class Role {

 private Long id;

 private String description;

 @Valid        //jakarta.validation.Valid
 private List<String> users = new ArrayList<>();

 // getter & setter with JsonProperty and more
 ...................

}

请问在List<String>类型的users字段上添加@Valid(jakarta.validation.Valid)注解是否正确?通过在线Swagger编辑器生成Spring服务端代码也会得到相同结果。


回答

从Jakarta Validation(原Bean Validation)的规范来看,这个注解的添加是合法但暂无实际作用的:

  • @Valid的核心用途是触发嵌套验证:当集合中的元素是带有自身校验规则的自定义Java Bean时,标注该注解会让校验器递归校验集合内的每个对象。
  • 但此处集合元素是String这类基础数据类型,而且你的OpenAPI定义里并没有给users的items设置任何校验约束(比如minLength、@Email等),所以这个注解不会触发任何额外校验逻辑。
  • OpenAPI Generator的默认逻辑是对所有集合类型字段统一添加@Valid注解,这种做法虽然冗余,但不会导致错误——校验器遇到基础类型元素时会自动跳过嵌套验证步骤,不影响正常流程。
  • 如果后续需要给users的元素添加校验规则(比如限制字符串长度、格式),这个预先添加的@Valid就会生效,自动触发每个元素的校验,算是一种提前预留的兼容写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:41:03