gpt4 book ai didi

java - 是否可以判断请求JSON中是否存在参数

转载 作者:行者123 更新时间:2023-12-01 19:41:48 30 4
gpt4 key购买 nike

我的数据库中有一个 action 表,因此我有 Action 实体和 ActionDTO ,它们基本上是相同的。

实体是:

@Entity
@Table(name = "action")
public class Action {

@Column(name = "name")
private String name;

@Column(name = "start_date")
private Date startDate;

@Column(name = "end_date")
private Date endDate;

//setters & getters
}

DTO 是:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ActionDTO {
private String name;
private Date startDate;
private Date endDate;

//setters & getters
}

在 Controller 中有一个更新action表的方法:

@PutMapping(path = "/action", produces = "application/json; charset=UTF-8")
public ResponseEntity<Object> updateAction(@RequestBody ActionDTO actionDTO) {
Action action = new Action();

// setting parameters to Action entity

actionRepository.save(action);
}

根据请求负载中是否存在字段 startDateendDate,我需要确定是否应该更新 start_dateend_date 在我的数据库中。

如果请求 JSON 是:

{
"name" : "action name",
"startDate" : null,
"endDate" : null
}

那么我应该start_dateend_date字段更新为NULL。

但是如果请求 JSON 是:

{
"name" : "action name"
}

那么我不应该更新start_dateend_date并保持它们不变。

那么是否可以确定HTTP请求中是否存在参数startDateendDate?也许 jackson 提供了一些开箱即用的解决方案?

最佳答案

ObjectMapper 的术语来说,缺失字段和设置为 null 的字段是相同的。因此,通过将 String 反序列化为 POJO,您将无法查看字段是否存在。但是,如果这就是您想要做的,那么您可以尝试将 json 反序列化为 Map,例如:

@PutMapping(path = "/action", produces = "application/json; charset=UTF-8")
public ResponseEntity<Object> updateAction(@RequestBody Map payload) {
if(payload.containsKey("")) {
//Something
}
}

关于java - 是否可以判断请求JSON中是否存在参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137828/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com