クエリパラメータとして列挙型を持つSpring Bootエンドポイントがあります。
@GetMapping("/example")
public List<Example> getByEnum(@RequestParam(name = "exampleEnum", required = false) ExampleEnum exampleEnum) {
// code
}
そして列挙型クラス:
public enum ExampleEnum {
FIRST,
SECOND,
}
エンドポイントに大文字の列挙値を渡すと、デシリアライズはうまくいきますが、小文字の場合はエラーがスローされます。
Java.lang.IllegalArgumentException: No enum constant
Spring Boot Restエンドポイントで大文字と小文字を区別せずに列挙型をデシリアライズする方法は?
この質問はクエリパラメータの逆シリアル化に関連しているため、重複していません。
Spring Boot 2.0は、 ACCEPT_CASE_INSENSITIVE_ENUMS 機能を持つJackson 2.9を使用しています。あなたは設定することでそれを有効にすることができるはずです
spring.jackson.mapper.ACCEPT_CASE_INSENSITIVE_ENUMS = true
ドキュメント、付録A のプロパティ。
import com.fasterxml.jackson.annotation.JsonCreator;
import Java.util.Arrays;
import Java.util.Optional;
public enum ExampleEnum {
FIRST,
SECOND;
@JsonCreator
public static ExampleEnum setValue(String key) {
Optional<ExampleEnum> exampleEnum = Arrays.stream(ExampleEnum.values())
.filter(exampleEnum -> exampleEnum.toString().equals(key.toUpperCase()))
.findAny();
return exampleEnum.orElse(null);
}