私は複数のカスタム属性を持つ列挙型を持っています。私はそれをシリアル化することができるよ、と私はそれをデシリアライズする@JsonCreator
メソッドを作成しましたが、それは働いていない:JsonDeserializerを手で動かすことなく、ジャクソンで複雑なカスタム列挙型をデシリアライズする方法は?
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.JsonNode;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum SomeEnum {
SOME_VALUE("Blah blah blah", "Example description");
private final String displayName;
private final String description;
ScheduleOptimizationRuleCode(String displayName, String description) {
this.displayName = displayName;
this.description = description;
}
public String getCode() { return this.name(); }
public String getDisplayName() {
return displayName;
}
public String getDescription() {
return description;
}
@JsonCreator
public static SomeEnum fromString(@JsonProperty("code") String value) {
return SomeEnum.valueOf(value);
}
}
シリアル化するとき、私は以下の(正しい)出力を得る:
{
"code": "SOME_VALUE",
"displayName": "Blah blah blah",
"description": "Example description"
}
を
デシリアライズすると、ジャクソンはJSON文字列のオブジェクト表現を見て、code
属性を調べ、@JsonCreator
注釈付きメソッドfromString()
に文字列として渡しますが、機能しません。 value
は常にnull
です。
@JsonCreator
アノテーション(例:PROPERTIES
、DELEGATING
)で「モード」を設定しようとしましたが、機能しません。私が見たすべての例は単一の価値しか持っていないので、この問題はありません。
どのように...
は、私は私が...とジャクソンのdocにJsonDeserializer
とワイヤーを手でロールバックすることができます知っているが、確かにこれは私が手作りデシリアライザが必要であることをそれほど複雑ではありません複数の属性を持つ列挙型を逆シリアル化しますか?