Джексон конвертирует java свойства примитива объекта как необязательные в строку json - PullRequest
2 голосов
/ 24 февраля 2020

Я новичок в Spring Boot и хочу отправить запрос стороннему API. У меня есть следующие параметры записи в JSON, которые будут использоваться как @ RequestBody ;

{"startDate": "2015-07-01", "endDate": "2015- 10-01 "," userId ": 1," type ": 1,}

ИЛИ

{" startDate ":" 2015-07-01 ", "endDate": "2015-10-01"}

public class ReportRequest {

@NotNull
private String startDate;

@NotNull
private String endDate;

private int userId;

private int type;

//getters and setters

Я использовал @ JsonInclude (JsonInclude.Include.NON_EMPTY на уровне класса и поля. Я также пытался NON_NULL для игнорирования 'userId' и 'type', но они все еще есть в объекте @RequestBody.

@PostMapping(value="/getData", produces = "application/json")
public ResponseEntity getReport(@Valid @RequestBody ReportRequest reportRequest){

Нет проблем при отправке запроса со всеми свойствами JSON Однако, когда я просто отправляю обязательные данные, «userId» и «type» автоматически устанавливаются на 0.

Я знаю, что использование Необязательный не лучшая практика. Не удалось найти способ создания объекта запроса с 2 необязательными данными запроса JSON. Спасибо.

1 Ответ

4 голосов
/ 24 февраля 2020

userId и type имеют int, что является примитивным значением по умолчанию 0, а JsonInclude.Include.NON_NULL будет игнорировать свойства только с нулевыми значениями, поэтому userId и type равны Integer введите так, чтобы значение по умолчанию было null, и Джексон может исключить их

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReportRequest {

  @NotNull
  private String startDate;

  @NotNull
  private String endDate;

  private Integer userId;

  private Integer type;

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...