Ich versuche und versäumt, eine Enum mit Jackson 2.5.4 deserialize, und ich sehe nicht ganz meinen Fall da draußen. Meine Eingabezeichenfolgen sind camel case, und ich möchte einfach den Standard-Enum-Konventionen zuordnen.Deserialisieren einer Enum mit 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;
}
}
Ich habe auch versucht @JsonValue
auf einem Getter ohne Erfolg, die eine Option war ich an anderer Stelle berichtet sah. Sie alle explodieren mit:
com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of ...Status from String value 'ready': value not one of declared Enum instance names: ...
Was mache ich falsch?
@FedericoPeraltaSchaffner, ich wünschte, das wahr wäre, aber es ist sicherlich bläst immer noch - ich habe gerade überprüft. Ich denke, es kann nicht mit der Vielfalt der Fälle umgehen. – jwilner
@FedericoPeraltaSchaffner: Same - "Wert nicht einer der deklarierten Enum Instanznamen" – jwilner
Wie wäre es, wenn Sie "READY" versuchen? – Simon