Trả lời thực tế:
Trình giải nén mặc định cho enums sử dụng .name()
để giải tuần tự hóa, vì vậy nó không sử dụng @JsonValue
. Vì vậy, như @OldCurmudgeon đã chỉ ra, bạn cần truyền vào {"event": "FORGOT_PASSWORD"}
để khớp với .name()
giá trị.
Một tùy chọn khác (giả sử bạn muốn các giá trị ghi và đọc json giống nhau) ...
Thêm thông tin:
Vẫn còn một cách khác để quản lý quá trình tuần tự hóa và giải tuần tự hóa với Jackson. Bạn có thể chỉ định các chú thích này để sử dụng trình tuần tự hóa và trình giải tuần tự tùy chỉnh của riêng bạn:
@JsonSerialize(using = MySerializer.class)
@JsonDeserialize(using = MyDeserializer.class)
public final class MyClass {
...
}
Sau đó, bạn phải viết MySerializer
và MyDeserializer
trông như thế này:
MySerializer
public final class MySerializer extends JsonSerializer<MyClass>
{
@Override
public void serialize(final MyClass yourClassHere, final JsonGenerator gen, final SerializerProvider serializer) throws IOException, JsonProcessingException
{
// here you'd write data to the stream with gen.write...() methods
}
}
MyDeserializer
public final class MyDeserializer extends org.codehaus.jackson.map.JsonDeserializer<MyClass>
{
@Override
public MyClass deserialize(final JsonParser parser, final DeserializationContext context) throws IOException, JsonProcessingException
{
// then you'd do something like parser.getInt() or whatever to pull data off the parser
return null;
}
}
Cuối cùng, đặc biệt là để làm điều này với một enum JsonEnum
nối tiếp với phương thức getYourValue()
, trình tuần tự hóa và trình giải tuần tự của bạn có thể trông như thế này:
public void serialize(final JsonEnum enumValue, final JsonGenerator gen, final SerializerProvider serializer) throws IOException, JsonProcessingException
{
gen.writeString(enumValue.getYourValue());
}
public JsonEnum deserialize(final JsonParser parser, final DeserializationContext context) throws IOException, JsonProcessingException
{
final String jsonValue = parser.getText();
for (final JsonEnum enumValue : JsonEnum.values())
{
if (enumValue.getYourValue().equals(jsonValue))
{
return enumValue;
}
}
return null;
}
{"Event":"FORGOT_PASSWORD"}
chưa Lưu ý giới hạn trên cả Sự kiện và FORGOT_PASSWORD.