我已经为枚举编写了自定义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
我错过什么了吗。
1条答案
按热度按时间wd2eg0qa1#
@RequestParam
不使用Jackson反串行化器。因此不使用@JsonCreator
。默认情况下,Spring使用
Converter
来反序列化@RequestParam
和@PathVariable
值。因此,如果要转换路径值,请创建一个自定义转换器。
看看这个链接,希望能对你有所帮助。