Resposta real:
O desserializador padrão para enums usa .name()
para desserializar, portanto, não está usando o @JsonValue
. Portanto, como @OldCurmudgeon apontou, você precisa passar {"event": "FORGOT_PASSWORD"}
para corresponder ao .name()
valor.
Uma outra opção (supondo que você deseja que os valores de gravação e leitura json sejam os mesmos) ...
Mais informações:
Existe (ainda) outra maneira de gerenciar o processo de serialização e desserialização com Jackson. Você pode especificar essas anotações para usar seu próprio serializador e desserializador personalizado:
@JsonSerialize(using = MySerializer.class)
@JsonDeserialize(using = MyDeserializer.class)
public final class MyClass {
...
}
Então você tem que escrever MySerializer
e MyDeserializer
que se parece com isto:
MySerializer
public final class MySerializer extends JsonSerializer<MyClass>
{
@Override
public void serialize(final MyClass yourClassHere, final JsonGenerator gen, final SerializerProvider serializer) throws IOException, JsonProcessingException
{
}
}
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
{
return null;
}
}
Por último, especialmente para fazer isso em um enum JsonEnum
que serializa com o método getYourValue()
, seu serializador e desserializador podem ter a seguinte aparência:
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"}
? Observe os limites em Evento e FORGOT_PASSWORD.