我有一个 Spring 启动 Controller ,我的参数之一是枚举。枚举有一个字符串值。我想将枚举和 Controller 的值作为参数传递给我枚举。这能做到吗?
@RequestMapping(value = "/")
public MyResponse getResponse ( @RequestParam(value = "version") final ProjectVersion version ) {
...bla bla bla...
}
public enum ProjectVersion {
VERSION_1 ("1.00")
VERSION_2 ("2.00")
private final String version;
ProjectVersion ( String version ) {
this.version = version;
}
@Override
public String toString() {
return this.version;
}
}
我希望能够提出如下请求:
http://myhost.com/mypath?version=1.00
并在 Controller 中获取 ProjectVersion.VERSION_1
有任何想法吗?
最佳答案
这是不可能的。您必须创建自定义转换器才能从 String
转换至 ProjectVersion
.
例如,首先从 String
定义转换器至 ProjectVersion
:
public class ProjectVersionConverter implements ConditionalGenericConverter {
@Override
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
return targetType.getType().equals(ProjectVersion.class);
}
@Override
public Set<ConvertiblePair> getConvertibleTypes() {
return Collections.singleton(new ConvertiblePair(String.class , ProjectVersion.class));
}
@Override
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
return ProjectVersion.findByVersion((String)source);
}
}
然后注册它:
@Configuration
public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new ProjectVersionConverter());
}
}
如果定义
ProjectVersionConverter
可以跳过注册作为一个Spring bean。 (此代码尚未经过测试)。
关于Spring Boot Controller - 枚举参数作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251576/