我正在尝试使用仅更新提供的字段的json数据进行发布请求。当前,当我在请求正文中未提供字段时,该字段将重置为默认值。
当我发送此邮件时:
{
"id": 59706975,
"maxRiskDollars": 1000,
"maxRiskCashPercent": 0.01
}
我得到这个答复
{
"id": 59706975,
"maxRiskDollars": 1000,
"maxRiskCashPercent": 0.01
}
然后我发送此邮件:
{
"id": 59706975,
"maxRiskCashPercent": 0.02
}
得到这个:
{
"id": 59706975,
"maxRiskDollars": 50,
"maxRiskCashPercent": 0.02
}
(50是maxRiskDollars的默认值)
当在JSON请求中未提供该字段时,如何使maxRiskDollars保持先前的值?
编辑: 根据要求提供后端代码-这是JAVA / SPRING / HIBERNATE
控制器:
@PostMapping("/tradeManagers")
TradeManager newTradeManager(@RequestBody TradeManager newTradeManager) {
return tradeManagerRepo.save(newTradeManager);
}
存储库:
@Repository
public interface TradeManagerRepo extends CrudRepository<TradeManager, Long>{
}
答案 0 :(得分:2)
要更新数据,根据REST标准,最好进行PATCH或PUT HTTP调用。我假设由于您只想更新json中提供的字段,因此更可能是PATCH。
在REST控制器上,您可以接受Map<String, Object>
,该@PatchMapping("/tradeManagers/{tradeManagerId}")
Map<String, Object> newTradeManager(@RequestBody Map<String, Object> tradeManagerMap,
@PathVariable(name = "tradeManagerId") String trademanagerId) {
Trademanager tradeManger = tradeManagerRepo.findById(tradeManagerId);
BeanUtils.copyProperties(trademanager, tradeManagerMap);
return tradeManagerMap;
}
仅包含应该更新的字段。
PATCH或PUT URL应该具有需要更新的资源的ID。
使用FindById()从回购中获取原始对象
然后,您可以使用Apache BeanUtils之类的东西(或Spring提供的开箱即用的任何类似库)仅复制源中的属性,即将Map复制到目标对象。
go get -v github.com/mdempsky/gocode
runtime/cgo
# runtime/cgo
fork/exec ../cc_args.py: no such file or directory