Обработка примитивных типов объединения в (де) сериализации JSON с помощью Джексона в Java

Я знаю, что по этой теме уже есть пара вопросов, но мне все еще трудно найти хорошее решение для примитивных типов. Я пытаюсь сериализовать и десериализовать следующие данные JSON:

{
  "key": "key1"
  "value": "value1"
}

Однако значение является типом объединения и может быть логическим, числом или строкой. Так что это также допустимые входные данные:

{
  "key": "key2"
  "value": true
}

и

{
  "key": "key3"
  "value": 3
}

Как лучше всего сериализовать и десериализовать это в Java POJO? Мой подход выглядит так (но, очевидно, работает только со строковыми значениями)

@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
public class Request {

    private final String key;

    private final String value;
}

@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
public class Response {

    private final String key;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private final String value;
}

Вам нужен DTO, чтобы получить преобразованный объект. Очевидно, String value не может содержать логическое значение. Поэтому сначала вы должны показать нам свой DTO. Может хочешь использовать Object value?   —  person Fynn    schedule 19.08.2020

Где / как мне сохранить информацию о типе во время де (сериализации)? Я как-то неправильно настраиваю аннотации @JsonTypeInfo   —  person Fynn    schedule 19.08.2020

См. также:  Почему эта ошибка? Подключиться к sts.amazonaws.com:443 [sts.amazonaws.com/54.239.29.25] не удалось: время ожидания подключения истекло: com.amazonaws.SdkClientException
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Fynn

    Решил вот так.

    @RequiredArgsConstructor
    @Getter
    @EqualsAndHashCode
    public class Request {
    
        private final String key;
    
        @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "valueClass")
        private final String value;
    
        private final String valueClass;
    }
    
    @RequiredArgsConstructor
    @Getter
    @EqualsAndHashCode
    public class Response {
    
        private final String key;
    
        @JsonInclude(JsonInclude.Include.NON_NULL)
        @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "valueClass")
        private final String value;
    
        @JsonIgnore
        private final String valueClass;
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: