OpenAPI生成接口重写GET/PUT方法报500错误求助
错误日志已经把问题点得很明白:你用OpenAPI生成的ConDto类里,provider字段(类型是枚举ProviderEnum)被加上了@Size注解,但@Size是用来校验字符串、集合、数组这类有“长度”属性的类型的,枚举类型根本不适用这套校验,所以Hibernate Validator找不到对应的校验器,直接抛出500错误。
手动写的方法没问题,是因为你自己不会给枚举加这种驴唇不对马嘴的注解——这锅得甩给OpenAPI生成工具,根源是你的OpenAPI规范里给枚举字段错误配置了长度约束。
修正OpenAPI规范文件
找到你的OpenAPI YAML/JSON,定位到ConDto的provider字段,删掉所有和长度相关的配置(比如maxLength、minLength)。枚举只需要定义可选值,不需要长度限制。错误示例:
components: schemas: ConDto: type: object properties: provider: type: string enum: [PROVIDER_A, PROVIDER_B] maxLength: 10 # 这行必须删除修正后:
components: schemas: ConDto: type: object properties: provider: type: string enum: [PROVIDER_A, PROVIDER_B]重新生成代码
用你的OpenAPI生成工具(比如openapi-generator)重新生成DTO和接口类,确保provider字段上的@Size注解消失。临时应急方案(不想改规范时)
如果暂时动不了规范,直接在生成的ConDto类里删掉provider字段的@Size注解。但注意:下次重新生成代码时这个修改会被覆盖,所以还是建议从规范上根治问题。测试验证
重启服务后,再用Postman或Swagger调用接口,500错误应该就消失了。
用API优先模式时,一定要注意规范里的约束和字段类型匹配:枚举就老老实实定义枚举值,别乱加字符串的校验规则,生成工具只会机械照做,不会帮你判断合理性。
内容的提问来源于stack exchange,提问作者gkhand

