我正在尝试使用仅更新提供的字段的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>{
}
要更新数据,根据REST标准,理想情况下会进行PATCH或PUT HTTP调用。我假设你只想更新json中提供的字段,它更像是一个PATCH。
在REST控制器中,您可以接受Map<String, Object>
,它只包含应该更新的字段。 PATCH或PUT URL应具有需要更新的资源的id。使用FindById()从repo中获取原始对象
然后,您可以使用类似Apache BeanUtils(或Spring提供的任何类似库)来复制源中的属性,即Map到目标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;
}