当前位置: 首页 > 知识库问答 >
问题:

在Java中接受并解析枚举类型查询参数的整数

邓仲卿
2023-03-14

我的Spring启动应用程序中的API具有Enum类型的查询参数。从邮递员那里,它只接受Enum字符串值。当作为查询参数值发送时,它会以400作为整数响应。如何配置Spring启动应用程序以接受Enum字符串值或Enum索引/序号值作为查询参数。

下面两种方法都应该有效

  1. <代码>

我正在使用Java,spring boot fw。它在dotNet中运行良好

共有1个答案

暴阳州
2023-03-14

据我所知,没有办法通过注释或其他方式神奇地做到这一点。您可以实现一个自定义转换器,并将输入的值转换为您的枚举,如下所示:

public class MyCustomEnumConverter implements Converter<String, YourEnum>
{
    @Override
    public YourEnum convert(String source) {
        try
        {
            if(isNumeric(source)) // If the string passed is a Number
            {
                int index = Integer.parseInt(source); 
                return YourEnum.values()[index]; // Get the Enum at the specific index
            }
            // Else if it is a string..
            return YourEnum.valueOf(source);
        } catch(Exception e) {
            return null; // or whatever you need
        }
    }

    private static boolean isNumeric(String str) {
        try {
            Integer.parseInt(str);
            return true;
        } catch(NumberFormatException e){
            return false;
        }
    }
}

然后注册转换器:

@Configuration
public class MyConfig extends WebMvcConfigurationSupport {
   @Override
   public FormattingConversionService mvcConversionService() {
       FormattingConversionService f = super.mvcConversionService();
       f.addConverter(new MyCustomEnumConverter());
       return f;
   }
}

您可以改进MyCustomEnumConverter逻辑,但为了简单起见,我就此打住。

如果您只想将特定的转换器应用于一个控制器,请检查此答案。

 类似资料:
  • 无法获取如何将字符串类型的引用与数组参数中的枚举值一起使用。我可以在items键中进行引用,并且它正在工作,但Swagger产生错误:不是有效的参数定义 Web UI生成界面,但它有文本区,而不是我期望的多选框。 正确的做法是什么? 我的代码:

  • 但是,我的问题在于如何理解当我尝试使用而不是执行相同操作时会发生什么 这里的例子是,有一个接口定义被定义为接受一个接口参数,实际上,这个接口参数是由实现接口的枚举实现的: 我有两个接口: 我看到了一些关于,但这扩展了我的理解。请救命! 顺便说一句,我认为返回类之前的泛型声明被用来指定“T”以用于类型侵蚀的目的,这是正确的吗?

  • 问题内容: 在Java中使用标志时,我看到了两种主要方法。使用int值和一组if-else语句。另一个是使用枚举和case-switch语句。 我想知道在使用枚举和整数进行标记之间在内存使用和速度方面是否存在差异? 问题答案: 双方并可以同时使用开关或IF-THEN-ELSE和内存使用情况也是最小的两个,而速度是类似的-有关于你提到的点之间没有显著差异。 但是,最重要的区别是类型检查。被检查,不是

  • 我写了以下方法 我如何将不同的枚举类型传递给第二个参数?我知道我不能创建枚举的实例,但初始化枚举意味着我将传递一个值,而不是整个初始化的枚举,如下所示...其他枚举也将传递给相同的方法以实现组合细节