Мы делаем все наши перечисления, как это, когда дело доходит до Rest / Json и т. Д.
Преимущество заключается в том, что ошибка читается человеком, а также дает список допустимых значений. Мы используем пользовательский метод MyEnum.fromString вместо MyEnum.valueOf, надеюсь, это поможет.
public enum MyEnum {
A, B, C, D;
private static final Map<String, MyEnum> NAME_MAP = Stream.of(values())
.collect(Collectors.toMap(MyEnum::toString, Function.identity()));
public static MyEnum fromString(final String name) {
MyEnum myEnum = NAME_MAP.get(name);
if (null == myEnum) {
throw new IllegalArgumentException(String.format("'%s' has no corresponding value. Accepted values: %s", name, Arrays.asList(values())));
}
return myEnum;
}
}
так, например, если вы звоните
MyEnum value = MyEnum.fromString("X");
вы получите исключение IllegalArgumentException со следующим сообщением:
«Х» не имеет соответствующего значения. Допустимые значения: [A, B, C, D]
вы можете изменить IllegalArgumentException на пользовательский.