Как настроить Джексона для конвертации Enum в JSON? - PullRequest
1 голос
/ 05 мая 2019
@AllArgsConstructor
@Getter    
public enum MemberType {
    INTERN("name_intern", 1),
    EMPLOYEE("name_employee", 10);

    private String name;
    private int workingMonth;
}

Вот мое перечисление. Я хочу преобразовать Enum класс в JSON строку с некоторыми ограничениями.

  1. Я хочу, чтобы MemberType не зависел от Джексона
  2. Я хочу конвертировать MemberType.INTERN в {id:INTERN, name:"name_intern", workingMonth:10}.
  3. У меня есть много Enums, которые я хочу конвертировать, как указано выше. И количество их имущества отличается друг от друга.
  4. Я хочу решить эту проблему с помощью всего одной глобальной конфигурации.
  5. Я не хочу использовать явное отражение Java.

Есть ли решение, которое удовлетворяет вышеуказанным ограничениям?

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Вы можете использовать аннотацию @JsonFormat следующим образом:

 @JsonFormat(shape=JsonFormat.Shape.OBJECT)
 public enum MemberType { ... }

или вы можете использовать @JsonValue аннотацию, например:

public enum MemberType {
        [...]

@JsonValue
public String getName() {
 return name;
}

}

или, возможно, CustomSerializer для Enum, вы можете найти более подробную информацию здесь .

0 голосов
/ 05 мая 2019

Если вы реализуете JsonSerializer, вы можете настраивать пользовательскую сериализацию.

Пример показан ниже.

@JsonComponent
public final class MediaTypeJsonComponent {
    public static class Serializer extends JsonSerializer<MemberType> {
        @Override
        public void serialize(MemberType value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            gen.writeStartObject();
            gen.writeStringField("id", value.name());
            gen.writeNumberField("workingMonth", value.getWorkingMonth());
            gen.writeStringField("name", value.getName());
            gen.writeEndObject();
        }
    }
    //
    // If you need,write code.
    //public static class Deserializer extends JsonDeserializer<Customer> {
    //}
}

Другой способ - реализовать JsonSerialize.

Если вы хотитеДля получения дополнительной информации обращайтесь к:

...