Как исправить 422 статус ответа от патча - PullRequest
0 голосов
/ 02 октября 2019

У меня есть фронт реакции и бэкэнд 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 PATCH http: //...../bmwsales/updateWeb/69406/ 422

Похоже, что это происходит .... там в настоящее время нет значения в templocation, и я пытаюсь обновить его .... как я могу изменить мой объект сопоставления, чтобы принять, что текущее значение может быть нулевым? Я думаю, что это проблема ... возможно ...

javax.json.JsonException: '{"id": 69406, "rfidtag": "E200420C71A06015010B6362"}' не содержит значения для имени 'templocation '

ОК. Я думаю, что исправил это .... Я изменил свой Jackson Config, чтобы закомментировать setdefaultpropertyinclusion, чтобы включить только ненулевое значение. Теперь это нормально. Но теперь вместо обновления 2 полей, которые я указал, патч json пытается обновить весь объект. Как я могу ограничить это?

1 Ответ

0 голосов
/ 03 октября 2019

Может быть, вы можете установить атрибут consumes внутри @PatchMapping со значением APPLICATION_JSON_VALUE в классе MediaType и в поле value со строкой URL, также проверьте свой объект Bmwsales и посмотрите,все поля соответствуют вашему запросу.

Надеюсь, это поможет.

...