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

如何配置Swagger Codegen Maven插件实现枚举不匹配返回Bad Request?

schemas:
accommodationDTO:
type: object
required:
- category
- masterCustomerSetId
- accommodationNm
- effectiveBeginDt
description: accommodation object
properties:
category:
required: true
type: string
enum:
- FARM
- APARTMENT
- HOUSE

当提交包含非法枚举值的请求时(如下),DTO中的`category`字段会被转为null传入控制器,我希望此时控制器直接返回Bad Request(400错误),请问如何通过Swagger配置实现该功能?

```json
{
    ...
    "category": "TRASH CAN",
    ...
}
解决方案

要实现非法枚举值的请求自动返回400错误,需要从代码生成配置和校验框架集成两方面入手:

1. 调整Swagger Codegen配置,生成带校验注解的DTO

修改swagger-codegen-maven-plugin的configOptions,新增两项校验相关配置:

<configOptions>
    <!-- 原有配置保留 -->
    <interfaceOnly>true</interfaceOnly>
    <java8>false</java8>                        
    <dateLibrary>java8</dateLibrary>
    <sourceFolder>.</sourceFolder>
    <throwsException>true</throwsException>
    <useTags>true</useTags>
    <!-- 新增配置 -->
    <enableBeanValidation>true</enableBeanValidation>
    <validateEnum>true</validateEnum>
</configOptions>
  • enableBeanValidation:开启后会为生成的DTO字段添加JSR-380校验注解(如@NotNull、自定义枚举校验注解)
  • validateEnum:强制对枚举类型生成校验逻辑,避免非法值被静默转为null

2. 启用校验框架(以Spring为例)

如果项目基于Spring框架,需完成以下步骤:

  • 引入Spring Validation依赖:在Spring Boot中添加spring-boot-starter-validation依赖即可
  • 在控制器方法的请求体参数前添加@Valid或@Validated注解,触发校验:
@PostMapping("/accommodation")
public ResponseEntity<?> addAccommodation(@Valid @RequestBody AccommodationDTO dto) {
    // 业务逻辑处理
}

当请求包含非法枚举值时,Spring会自动抛出MethodArgumentNotValidException,默认返回400错误响应。

3. 非Spring项目的处理方式

如果不使用Spring,需要手动集成JSR-380实现(如Hibernate Validator),在控制器中手动触发校验:

  • 初始化校验器实例
  • 对传入的DTO执行校验
  • 若存在校验错误,直接构造并返回400错误响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:43:09