У меня есть 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"
}