Spring Boot Controller - 枚举参数作为值

标签 spring spring-boot enums jackson

我有一个 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/

相关文章:

java - SpringJUnit4ClassRunner 带有声明性和带注释的 bean

java - native 查询返回 Spring Boot 中 #pageable 的所有记录

java - 在 Java 中为枚举值设置空字符串

java - Spring Redis - 从 application.properties 文件中读取配置

spring-boot - Kotlin 数据类 No String-argument constructor with spring data rest

java - Spring : How to create similar beans in Spring Boot dynamically?

java - MVC Spring Boot 和 JPA 关系

java - switch case 中的枚举引用

grails - GORM : setting an ordering on enum values

java - 为什么Spring Boot时找不到bean?