Я работал над SpringBoot Rest Api.
У меня есть объект комментариев. Я просто хочу обновить текст комментария. Поэтому я решил использовать патчмаппинг.
Я новичок в SpringBoot. Я учусь на тренинге. Мой план состоял в том, чтобы найти комментарий по заданному идентификатору. И обновите текст как заданный параметр String.
Когда я использую этот контроллер с @RequestBody. И отправьте строку через почтальона.
@PatchMapping("/updateStatus/{id}")
public ResponseEntity<CommentDto> updateTheUserStatus(@PathVariable Long id, @RequestBody String text){
return ResponseEntity.ok(commentService.changeStatus(id, text));
}
Почтальон выдает 500 Internal Error. Но в базе данных текстовое поле меняется так, как я хочу.
{
"timestamp": "2022-04-13T08:17:13.615+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/v1/api/comment/updateStatus/4"
}
Когда я использую этот контроллер с @RequestParam, почтальон дает 400 неверных запросов, и ничего не меняется.
@PatchMapping("/updateStatusMe/{id}")
public @ResponseBody ResponseEntity<CommentDto> updateTheUserStatus1(@PathVariable Long id, @RequestParam String text){
return ResponseEntity.ok(commentService.changeStatus(id, text));
}
{
"timestamp": "2022-04-13T08:19:41.391+00:00",
"status": 400,
"error": "Bad Request",
"path": "/v1/api/comment/updateStatusMe/4"
}
Я знаю, что, возможно, я совершенно не прав. Но я задаю этот вопрос, чтобы вы узнали, что я упускаю. Спасибо за помощь!
Решение проблемы
@RequestParamаннотированные параметры связываются с конкретными параметрами запроса сервлета. Значения параметров преобразуются в объявленный тип аргумента метода. Эта аннотация указывает, что параметр метода должен быть привязан к параметру веб-запроса. Он используется для присвоения указанного параметра запроса параметру в методе.
@RequestBodyаннотированные параметры связываются с телом HTTP-запроса. Значения параметров преобразуются в объявленный тип аргумента метода с помощью HttpMessageConverters. Эта аннотация указывает, что параметр метода должен быть привязан к телу веб-запроса.
Аннотация RequestBody может получать данные в формате json и преобразовывать их в соответствующий тип данных.
Итак, @RequestBodyбудет более подходящим для PatchMapping.
Комментариев нет:
Отправить комментарий