ObjectMapper - Как отправить нулевое значение в JSON - PullRequest
0 голосов
/ 16 декабря 2018

В соответствии со спецификацией стороннего API, мне нужно отправить нулевое значение в JSON, используя ObjectMapper, если значение не существует,

Ожидаемые результаты: "optional": null

Если существует необязательное значение,затем отправьте "optional": "value"

Я не нашел такой опции в Джексон - Работа с картами и нулями

Код:

requestVO = new RequestVO(optional);
ObjectMapper mapper = new ObjectMapper();
String requestString = mapper.writeValueAsString(requestVO);

Класс:

public class RequestVO {
   String optional;
   public RequestVO(String optional) {
      this.optional = optional;
   }

public String getOptional() {
    return optional;
}

public void setOptional(String optional) {
    this.optional= optional;
}

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Вы можете настроить свой ObjectMapper следующим образом:

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

Если в запросе JSON нет значения, обработанный будет иметь null, как вы ожидали.

Вы можете даженастроить Spring bean-компонент для ObjectMapper, если вам нужно.

РЕДАКТИРОВАТЬ:

Я неправильно понял вопрос, его интересовал ответ JSON, а необъект разобран. Правильное свойство в этом случае: JsonInclude.Include.USE_DEFAULTS.

Извинения за путаницу.

0 голосов
/ 16 декабря 2018

Добавить @JsonInclude(JsonInclude.Include.USE_DEFAULTS) аннотацию к вашему классу.

@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
class RequestVO {
    String optional;

    public RequestVO(String optional) {
        this.optional = optional;
    }

    public String getOptional() {
        return optional;
    }

    public void setOptional(String optional) {
        this.optional = optional;
    }
}

Пример:

RequestVO requestVO = new RequestVO(null);

ObjectMapper mapper = new ObjectMapper();
try {
    String requestString = mapper.writeValueAsString(requestVO);
    System.out.println(requestString);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

Вывод:

{"optional":null}

Со значением:

RequestVO requestVO = new RequestVO("test");

ObjectMapper mapper = new ObjectMapper();
try {
    String requestString = mapper.writeValueAsString(requestVO);
    System.out.println(requestString);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

Вывод:

{"optional":"test"}

Вы можете использовать аннотацию @JsonInclude для четных свойств.Таким образом, вы можете сериализовать как null или игнорировать некоторые свойства при сериализации.

...