Не могу получить текст для обновления. guizero. Raspberry Pi 3b +

Фактический ответ:

Дессериализатор по умолчанию для перечислений использует .name() для десериализации, поэтому он не использует @JsonValue. Так, как отметил @OldCurmudgeon, вам нужно пройти в {"event": "FORGOT_PASSWORD"}, чтобы соответствовать значению .name().

Другой вариант (если вы хотите, чтобы значения записи и чтения json были одинаковыми) ...

Дополнительная информация:

Существует еще один способ управления процессом сериализации и десериализации с помощью Jackson. Вы можете указать эти аннотации для использования своего собственного сериализатора и десериализатора:

@JsonSerialize(using = MySerializer.class)
@JsonDeserialize(using = MyDeserializer.class)
public final class MyClass {
    ...
}

Затем вам нужно написать MySerializer и MyDeserializer, которые выглядят следующим образом:

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;
    }

}

Последнее немного, особенно для этого с перечислением JsonEnum, которое сериализуется с помощью метода getYourValue(), ваш сериализатор и десериализатор могут выглядеть так: это:

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;
}
0
задан Jesse 22 February 2019 в 00:29
поделиться