Java中Enum类型查询参数接受并解析整数

问题描述 投票:0回答:1

我的 Spring Boot 应用程序中的 API 有一个

Enum
类型的查询参数。 从邮递员那里,它只接受
Enum
字符串值。当作为查询参数值发送时,它以整数 400 进行响应。 如何配置 Spring Boot 应用程序以接受枚举字符串值或枚举索引/序数值作为查询参数。

下面两种方法都应该有效

  1. <base-url>/123/status?status=inprogress
  2. <base-url>/123/status?status=2
    (2 是进度索引
    enum

我正在使用Java,Spring Boot固件。 它在 dotNet 中运行良好

java .net spring spring-boot
1个回答
1
投票

据我所知,没有办法通过注释之类的方式神奇地做到这一点。您可以做的是实现一个自定义转换器并将输入的值转换为您的

enum
,如下所示:

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;
        }
    }
}

然后注册您的

Converter
:

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

你可以改进

MyCustomEnumConverter
的逻辑,但为了简单起见,我就这样保留了。

如果您想将特定的

Converter
仅应用于一个控制器,请检查 此答案

© www.soinside.com 2019 - 2024. All rights reserved.