Я пытаюсь и не пытаюсь десериализировать перечисление с помощью Jackson 2.5.4, и я не совсем вижу свое дело. Мои строки ввода - это случай верблюда, и я хочу просто сопоставить стандартные соглашения Enum.Deserializing enum with Jackson
@JsonFormat(shape = JsonFormat.Shape.STRING)
public enum Status {
READY("ready"),
NOT_READY("notReady"),
NOT_READY_AT_ALL("notReadyAtAll");
private static Map<String, Status> FORMAT_MAP = Stream
.of(Status.values())
.collect(toMap(s -> s.formatted, Function.<Status>identity()));
private final String formatted;
Status(String formatted) {
this.formatted = formatted;
}
@JsonCreator
public Status fromString(String string) {
Status status = FORMAT_MAP.get(string);
if (status == null) {
throw new IllegalArgumentException(string + " has no corresponding value");
}
return status;
}
}
Я также попытался @JsonValue
на получателе не увенчались успехом, который был вариант я видел в других источниках. Они все взорвут:
com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of ...Status from String value 'ready': value not one of declared Enum instance names: ...
Что я делаю неправильно?
@FedericoPeraltaSchaffner, я хочу, чтобы это было правдой, но это, конечно, все еще дует вверх - я только что проверил. Я думаю, что он не может справиться с множеством случаев. – jwilner
@FedericoPeraltaSchaffner: То же самое - «значение не одно из объявленных имен экземпляра Enum» – jwilner
Как насчет того, если вы попытаетесь «ГОТОВ»? – Simon