私はよりよい休止状態の列挙型マッピングが必要でした。thisページは私によく役立ちました(私はintの代わりにchar型を使用しました)。一般的なEnum Jsonの逆シリアル化
次の質問は、どのようにして一般的な方法で列挙型を直列化/逆直列化できますか?性別列挙の
思う:
@JsonSerialize(using = PersistentEnumSerializer.class)
@JsonDeserialize(using = PersistentEnumDeserializer.class)
public enum Gender implements PersistentEnum {
MALE("M", "Male"), FEMALE("F", "Female");
private String code;
private String display;
Gender(String code, String display) {
this.code = code;
this.display = display;
}
public String getName() {
return name();
}
public String getCode() {
return code;
}
public String getDisplay() {
return display;
}
public String toString() {
return display;
}
}
のgetNameを実装()、にgetCode()とPersistentEnumインタフェースのgetDisplay()メソッド。シリアライズは簡単です:
public class PersistentEnumSerializer extends JsonSerializer<PersistentEnum> {
@Override
public void serialize(PersistentEnum object, JsonGenerator generator, SerializerProvider provider) throws IOException, JsonProcessingException {
generator.writeStartObject();
generator.writeFieldName("name");
generator.writeString(object.getName());
generator.writeFieldName("code");
generator.writeString(object.getCode());
generator.writeFieldName("display");
generator.writeString(object.getDisplay());
generator.writeEndObject();
}
}
が、どのように私はJava 6のにデシリアライズすることができますか? Java 8では、私はPersistentEnum
インターフェイスに静的メソッドを追加します。
public class PersistentEnumDeserializer extends JsonDeserializer<PersistentEnum> {
@Override
public PersistentEnum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
//String value = node.get("name").asText();
//TODO Somehow I need to get Gender.MALE if the json is {"name":"MALE","code":"M","display":"Male"}
return null;
}
}