Spring mvc не может получить параметр json

Java-код:

@RequestMapping("/addQuestion")
@ResponseBody
public Result addQuestion(@RequestParam("title") String title,
        @RequestParam("content") String content){
    Question question = new Question();

Я использую почтальон для отправки параметров запроса почтальон:

Reqeust Header:
Content-Type:application/json

Request Body:
{
"userId" : 1,
"offset": 0,
"limit":10
}

возвращаемый результат:

HTTP-код: 400

"timestamp": "2019-02-20T06:39:41.223+0000",
"status": 400,
"error": "Bad Request",
"message": "Required int parameter 'userId' is not present",

Я не знаю, проблема в почтальоне или нет, я думаю, что код Java должен быть в порядке.....

помоги мне... спасибо... чувак

Вставьте код, удалите изображения.

Antoniossss 20.02.2019 09:06

где эта проверка идентификатора пользователя?

Sai prateek 20.02.2019 09:14

изменил его

Dack.H 20.02.2019 09:17

Это сработает, но не для json, а для отправки формы.

Antoniossss 20.02.2019 09:20
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
4
128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В этом случае вы должны использовать @RequestBody вместо @RequestParam.

@PostMapping("/addQuestion")
@ResponseBody
public Result addQuestion(@RequestBody Question)

@RequestParam предназначен для обработки параметров запроса, но вы хотите обрабатывать тело запроса, для этого предназначен @RequestBody.

Я понимаю, спасибо

Dack.H 20.02.2019 10:07

В Spring Framework у нас есть три аннотации, которые позволяют нам отправлять некоторые данные через запрос:

1) public void createUser(@RequsetBody User user) {
          ...
   }

в запрос вы должны добавить тело запроса, это на самом деле ваш случай, когда вы отправляете тело запроса:

Reqeust Header:
Content-Type:application/json

Request Body:
{
"userId" : 1,
"offset": 0,
"limit":10
}

но ваш контроллер ждет @RequestParam

2) public void addUserName(@RequsetParam String userName) {
          ...
   }

в запрос вы должны добавить параметры запроса следующим образом:

Http Params

userId : 1,
offset: 0,
limit:10

3) Если у вас есть только один или два параметра, вы можете использовать @PathVariable

@GetMapping("/users/{userId}")
public User getUser(@PathVariable("userId") Long userId) {
          ...
}

запрос должен выглядеть так: serviceUrl/apiUri/users/123

Отлично!!~ Я понял, спасибо

Dack.H 20.02.2019 10:09

Другие вопросы по теме