java 用于枚举的Sping Boot JsonCreator不适用于GET调用中的请求参数

eqoofvh9  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(319)

我已经为枚举编写了自定义JsonCreator

@GetMapping(value = "/path/{pathVar1}")
  public Response getValue(
      @PathVariable String pathVar1,
       @RequestParam(required = false, name = "type") MyEnum type)

枚举

@AllArgsConstructor
@Getter
public enum MyEnum {

  A_12(Set.of("a", "12"));

  private Set<String> aliases;

  @JsonCreator
  public static MyEnum forValues(@JsonProperty("type") String type) {
    return Arrays.stream(MyEnum.values())
        .filter(s -> s.getAliases().stream().anyMatch(a -> StringUtils.equalsIgnoreCase(a, type)))
        .findFirst()
        .orElseThrow(() -> new RuntimeException("aa"));
  }

它不考虑枚举的jsoncreator。

Caused by: java.lang.IllegalArgumentException: No enum constant MyEnum.12

我错过什么了吗。

wd2eg0qa

wd2eg0qa1#

@RequestParam不使用Jackson反串行化器。因此不使用@JsonCreator
默认情况下,Spring使用Converter来反序列化@RequestParam@PathVariable值。
因此,如果要转换路径值,请创建一个自定义转换器。
看看这个链接,希望能对你有所帮助。

相关问题