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
相关产品推荐
相关产品推荐

