【发布时间】:2019-10-02 20:59:50
【问题描述】:
我有一个 react 前端和 java 后端。我正在使用 axios.patch 请求,并且一直收到 422 响应。我不知道出了什么问题。我希望它能够正确更新。我正在使用 jsonpatch 来尝试更新这个对象。
我尝试了很多东西。我的请求有问题吗?我不知道。
这是我的代码:
return API.patch(`bmwsales/updateWeb/${vid}/`, veh, {headers: {
'Authorization' : basic }})
.then((response) =>{
if (response.status==200){
dispatch(updateVehicleSuccess());
}
}, (error) =>{
if (error.response.status == 500){
dispatch(vehicleError(error.message, "Could not update rfidtag, please try again."));
}else if
(error.response.status == 422){
dispatch(vehicleError(error.message, "Could not update rfidtag, please try again."));
}
控制器:
@PatchMapping("/bmwsales/updateWeb/{id}")
public ResponseEntity<?> updateVehicleTagWeb(@PathVariable(value="id") Integer id, @RequestBody Bmwsales v) throws JsonProcessingException{
ObjectMapper objMapper=new ObjectMapper();
JsonPatchBuilder jsonPatchBuilder=Json.createPatchBuilder();
JsonPatch jsonPatch=jsonPatchBuilder.replace("/templocation",v.getTemplocation()).replace("/rfidtag", v.getRfidtag()).build();
Bmwsales vehicle=bmwService.getVin(id).orElseThrow(ResourceNotFoundException::new);
BmwsalesUpdate veh=oMapper.asInput(vehicle);
BmwsalesUpdate h=patchHelp.patch(jsonPatch, veh, BmwsalesUpdate.class);
oMapper.INSTANCE.update(vehicle, h);
return new ResponseEntity<>(h, HttpStatus.OK);
我想知道如何解决这个问题......
错误: xhr.js:178 补丁http://...../bmwsales/updateWeb/69406/422
看起来正在发生这种情况....临时位置中当前没有值,我正在尝试更新它....如何更改我的对象映射器以接受当前值可以为空?我在想这就是问题所在……也许……
javax.json.JsonException: '{"id":69406,"rfidtag":"E200420C71A06015010B6362"}' 不包含名称“templocation”的值
好的,我想我解决了这个问题....我更改了我的 Jackson 配置,将 setdefaultpropertyinclusion 注释掉,只包含非空值。现在没关系。但现在不是更新我指出的 2 个字段,而是 json 补丁正在尝试更新整个对象。我该如何限制这个?
【问题讨论】:
-
您可以稍微简化代码,将参数
Integer id更改为Bmwsales vehicle(spring boot 会执行一些方面代理魔术,然后将id映射到 enentity或 null) .也许不是Bmwsales确切(如果它的 DTO),而是一个实体类 -
P.S.
(@PathVariable(value="id") Integer id, ...->(@PathVariable(value="id") YurEntityClass vehicle, ... -
感谢您的回复。我需要将 id 和 Bmwsales 对象分开。 id 是我要更新的 Bmwsales 对象的 id。然后过来的 Bmwsales 对象有我要更新的 2 个项目。 @RostyslavBarmakov
标签: java spring-boot axios patch