Java 如何从修补程序修复422状态响应
我有一个react前端和java后端。我正在使用axios.patch请求,并不断收到422响应。我不知道怎么了。我想这是正确更新。我正在使用jsonpatch尝试更新这个对象 我试过很多东西。我的要求有问题吗?我不知道 这是我的代码:Java 如何从修补程序修复422状态响应,java,spring-boot,axios,patch,Java,Spring Boot,Axios,Patch,我有一个react前端和java后端。我正在使用axios.patch请求,并不断收到422响应。我不知道怎么了。我想这是正确更新。我正在使用jsonpatch尝试更新这个对象 我试过很多东西。我的要求有问题吗?我不知道 这是我的代码: return API.patch(`bmwsales/updateWeb/${vid}/`, veh, {headers: { 'Authorization' : basic }}) .then((response) =>{
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);
@PatchMapping(“/bmwsales/updateWeb/{id}”)
public ResponseEntity UpdateHicletAgWeb(@PathVariable(value=“id”)整数id,@RequestBody Bmwsales v)引发JsonProcessingException{
ObjectMapper objMapper=新的ObjectMapper();
JsonPatchBuilder JsonPatchBuilder=Json.createPatchBuilder();
JsonPatch JsonPatch=jsonPatchBuilder.replace(“/templation”,v.getTemplocation()).replace(“/rfidtag”,v.getRfidtag()).build();
Bmwsales vehicle=bmwService.getVin(id).orelsetrow(ResourceNotFoundException::new);
BmwsalesUpdate veh=oMapper.asInput(车辆);
BmwsalesUpdate h=patchHelp.patch(jsonPatch,veh,BmwsalesUpdate.class);
oMapper.INSTANCE.update(车辆,h);
返回新的响应状态(h,HttpStatus.OK);
我想知道如何解决这个问题
错误:
js:178补丁422
看起来正在发生这种情况…templocation中当前没有值,我正在尝试更新它…如何更改对象映射器以接受当前值可以为null?我认为这就是问题所在…可能
javax.json.JsonException:“{”id“:69406,“rfidtag”:“E200420C71A06015010B6362”}”不包含名称“templocation”的值
好的,我想我已经解决了这个问题……我更改了我的Jackson配置,将setdefaultpropertyinclusion注释掉,使其仅包含非null。现在可以了。但是现在,我没有更新json补丁试图更新整个对象的两个字段。我如何限制这一点呢?也许你可以设置
consumes
属性I将@PatchMapping
与类MediaType
中的值APPLICATION\u JSON\u value
和value
字段中的URL字符串相关联,同时检查Bmwsales
对象,查看所有字段是否与您的请求匹配
希望这有帮助。您可以简化代码一点,将参数
整数id
更改为Bmwsales vehicle
(spring boot执行某些方面的代理魔法,然后将id
映射到enentity
或null)。可能不是精确的Bmwsales
(如果其DTO),而是映射到实体classP.S.(@PathVariable(value=“id”)整数id,…
->(@PathVariable(value=“id”)YurEntityClass vehicle,…
感谢您的响应。我需要将id和Bmwsales对象分开。id是我要更新的Bmwsales对象的id。然后过来的Bmwsales对象有我要更新的2项。@Rostyslavbarmakov感谢您的响应。Bmwsales对象有35个字段。我只需要升级数据我的控制器中的Bmwsales对象只有两个字段不是空的……这是个问题吗?@snake_404;也许,你能把你的Bmwsales代码放在这里吗?或者只是验证你的字段是否没有必需的字段或类似的内容。我想你已经这样做了,但以防万一,你调试了你的code并验证您是否可以访问控制器代码?