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

OpenAPI Generator生成的自定义值枚举反序列化异常问题

问题分析与解决方法

问题原因

Spring MVC处理@RequestParam类型的枚举参数时,默认使用Enum.valueOf()方法做转换——该方法要求输入字符串与枚举常量名(如MR、MRS)完全匹配,不会识别枚举的自定义值(mr、mrs),也不会触发Jackson的@JsonCreator注解。因为@JsonCreator仅在JSON反序列化场景生效,而URL查询参数属于Spring MVC的参数解析流程,和Jackson的序列化机制无关。

解决方案

方法一:自定义枚举转换器

创建针对GreetEnum的Spring转换器,让Spring调用枚举的fromValue方法完成转换:

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

@Component
public class GreetEnumConverter implements Converter<String, GreetEnum> {
    @Override
    public GreetEnum convert(String source) {
        return GreetEnum.fromValue(source);
    }
}

这个转换器会被Spring MVC自动注册,处理所有String到GreetEnum的参数转换(包括@RequestParam)。

方法二:修改OpenAPI Generator配置自动生成转换器

在build.gradle的openApiGenerate配置中添加useSpringConverter: "true",让生成器自动为枚举创建Spring转换器:

openApiGenerate {
    // 其他配置...
    configOptions.set([
            // 保留原配置项
            useSpringConverter: "true"
    ])
}

重新生成代码后,会自动创建GreetEnumConverter类,无需手动编写,Spring会自动识别并使用。

方法三:全局配置枚举转换规则(多枚举场景)

如果项目中有多个类似枚举,可配置全局转换器,通过反射调用所有带fromValue方法的枚举:

import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.lang.reflect.Method;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new Converter<String, Enum<?>>() {
            @Override
            @SuppressWarnings("unchecked")
            public Enum<?> convert(String source) {
                // 这里需要结合实际场景,通过方法参数获取目标枚举类型,示例仅做演示
                return null;
            }
        });
    }
}

注:该方式需要处理反射逻辑,适合多枚举统一处理的场景,单个枚举推荐使用前两种方法。

验证

修改完成后重新运行测试,传入greet=mrs时,Spring会调用对应的转换器触发fromValue方法,正确转换为GreetEnum.MRS实例,不再抛出转换异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:05:08