Pan*_*nos 7 enums spring jackson spring-boot
我有一个弹簧启动控制器,我的一个参数是一个枚举.枚举有一个字符串值.我想将enum和控制器的值作为参数传递给我Enum.可以这样做吗?
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够提出如下要求:
http://myhost.com/mypath?version=1.00
并在控制器中获取ProjectVersion.VERSION_1
有任何想法吗?
Nic*_*rot 10
这是不可能的.您必须创建自定义转换器以从a转换String为ProjectVersion.
例如,首先定义转换器从a 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后注册:
@Configuration
public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new ProjectVersionConverter());
}
}
Run Code Online (Sandbox Code Playgroud)
如果您定义ProjectVersionConverter了Spring bean,则可以跳过注册.(此代码未经过测试).
| 归档时间: |
|
| 查看次数: |
9047 次 |
| 最近记录: |