LoginSignup
8
8

More than 5 years have passed since last update.

Spring Boot で Enum を case insensitive (ignore case) でパースする方法

Posted at

Spring Boot で Enum を case insensitive (ignore case) でパースする方法

spring の既定では文字列を enum に変換する際、case sensitive です。
case insensitive にする方法を解説します。

ConversionService と Converter

文字列を enum に変換する独自の Converter を ConversionService に組み込むことで、
spring の既定の動作を変更することができます。

文字列から単純な enum Sex に変換します:

Sex.java
public enum Sex {
    Male,
    Female
}

ConversionService と Converter とを提供する @Configuration クラス:

ApplicationConfiguration.java
@Configuration
public class ApplicationConfiguration {
    @Bean
    public ConversionService conversionService() {
        DefaultConversionService conversionService = new DefaultConversionService();

        conversionService.addConverter(new Converter<String, Sex>() {
            public Sex convert(String source) {
                for (Sex sex : Sex.values()) {
                    if (source.equalsIgnoreCase(sex.toString())) {
                        return sex;
                    }
                }
                throw new IllegalArgumentException("invalid sex: " + source);
            }
        });

        return conversionService;
    }
}

テスト

ApplicationProgram
@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan
public class ApplicationProgram {
    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(ApplicationProgram.class, args);
        Runtime.getRuntime().exit(SpringApplication.exit(ctx));
    }
}
ApplicationOptions
@Component
@ConfigurationProperties
public class ApplicationOptions {
    private Sex sex;

    public Sex getSex() {
        return this.sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    @PostConstruct
    public void init() {
        System.out.println("sex=" + this.getSex());
    }
}
ApplicationProgramTest
public class ApplicationProgramTest {
    @Test
    public void testMain() {
        ApplicationProgram.main(new String[] { "--sex=male" });
    }
}

コンソールに sex=Mail と出力されます。

以上。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8