我的 Spring Boot 应用程序中的 API 有一个
Enum
类型的查询参数。
从邮递员那里,它只接受 Enum
字符串值。当作为查询参数值发送时,它以整数 400 进行响应。
如何配置 Spring Boot 应用程序以接受枚举字符串值或枚举索引/序数值作为查询参数。
下面两种方法都应该有效
<base-url>/123/status?status=inprogress
<base-url>/123/status?status=2
(2 是进度索引 enum
)我正在使用Java,Spring Boot固件。 它在 dotNet 中运行良好
据我所知,没有办法通过注释之类的方式神奇地做到这一点。您可以做的是实现一个自定义转换器并将输入的值转换为您的
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
仅应用于一个控制器,请检查 此答案。