Полезная нагрузка @RequestBody JSON не отображается на DTO, если одно из полей в JSON пусто. Как принять ноль в качестве действительной привязки для соответствующего поля? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть DTO, полученное от Entity, и я получаю это DTO как @RequestBody в моем @PutMapping rest-контроллере, например:

    @PutMapping("{id}")
    public SomeDTO update(@PathVariable("id") int id, @RequestBody SomeDTO dto) {

    //logic here..
    }

Если я выдам запрос HTTP PUT с данными полезной нагрузки, соответствующими SomeDTO, , где ни один из ключей JSON не имеет нулевого значения , все работает нормально; но в тот момент, когда я целенаправленно установил один из JSON ключей на ноль, запрос не попадает на этот контроллер, что заставляет меня думать, что JSON Полезная нагрузка не отображается на DTO, так как поле равно нулю, и, как таковое, этот контроллер никогда не вводится.

Если я затем аннотирую поле, которое я хочу сделать обнуляемым с @JsonIgnore, то оно игнорирует это поле при любых обстоятельствах - независимо от того, в соответствующем поле есть null или данные.

Как я могу заставить эту работу работать так, чтобы, когда поле JSON (отправлено через PUT) имело нулевое значение, оно отображалось соответственно (с null) к моему DTO, и когда у него есть данные полезной нагрузки, то эти данные отображаются в соответствующее поле? опять же, @JsonIgnore вообще удаляет это поле из игрового процесса, а это не то, чего я хочу.

DTO выглядит так:

@Data
public class SomeDTO {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String author;
    private LocalDate date;
    private Integer code;
}

JSON Полезная нагрузка, с которой он работает :

{
    "id":1,
    "author":"George",
    "date":"2020-02-04",
    "code":"01"
}

JSON Полезная нагрузка, с которой он не работает (в частности, вообще не затрагивает контроллер):

{
    "id":1,
    "author":"George",
    "date": null,
    "code":"01"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...