У меня проблема с обработкой параметров из запроса curl в моем приложении для весенней загрузки.

Мой метод пост контроллера:

@RequestMapping(value = "/cat", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ResponseEntity addCat(@Valid @ModelAttribute NewCatRequest newCatRequest, BindingResult bindingResult) {
    System.out.println( newCatRequest);
    if (bindingResult.hasErrors()) {
        return ResponseEntity.badRequest().body(bindingResult.getFieldError().getDefaultMessage());
    }

    int rowsAffected = catsRepository.saveCat(newCatRequest.getName(), newCatRequest.getColor(), newCatRequest.getTail_length(), newCatRequest.getWhiskers_length());
    if (rowsAffected == 1) {
        return ResponseEntity.ok().body(newCatRequest);
    } else {
        return ResponseEntity.badRequest().body("There was an unexpected error while trying to create cat for you :(");
    }
}

И проблема в том, что: когда я пытаюсь отправить это с помощью curl:

curl -X POST http: // localhost: 8080 / cat \ -d "{\" имя \ ": \" Тихон \ ", \" цвет \ ": \" красно-белый \ ", \" Длина_хвоста \ ": 15, \" Длина_ усов \ ": 12}»

У меня есть все нулевые параметры в 'newCatRequest': NewCatRequest {name = 'null', color = 'null', tail_length = 0, whiskers_length = 0}

НО, когда я пытаюсь сделать то же самое с Почтальоном (метод POST, x-www-form-urlencoded в теле с моими параметрами), я получаю правильный результат: Результат от Почтальона

Помогите мне, пожалуйста, чтобы понять, в чем проблема.

0
Victor Buryak 27 Фев 2019 в 09:23

3 ответа

Лучший ответ
curl -X POST http://localhost:8080/cat \
     -d "{\"name\": \"Tihon\", \"color\": \"red & white\", \"tail_length\": 15, \"whiskers_length\": 12}"

Вышеупомянутый curl запрос имеет тело JSON, тогда как ваш метод обработки запроса

@RequestMapping(value = "/cat", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)

Потребляет / принимает: application/x-www-form-urlencoded. Поэтому вы должны либо преобразовать свой метод для использования / принятия application/json, либо изменить свой curl запрос на:

curl -X POST http://localhost:8080/cat \
     -d 'name=Tihon&color=red%20%26%20white&tail_length=15&whiskers_length= 12' \
     -H 'Content-Type: application/x-www-form-urlencoded'

ИЗМЕНИТЬ 1

Обратите внимание, что по умолчанию Content-Type для curl является application/x-www-form-urlencoded. Чтобы использовать JSON, измените ваш запрос на:

curl -X POST http://localhost:8080/cat \
     -d "{\"name\": \"Tihon\", \"color\": \"red & white\", \"tail_length\": 15, \"whiskers_length\": 12}" \
     -H 'Content-Type: application/json'
0
Patrick W 28 Фев 2019 в 08:29

Вы можете использовать опцию кода ниже кнопки отправки в почтальоне, чтобы сгенерировать точный запрос скручивания, который будет работать для вас https://i.stack.imgur.com/hbk8M.png в выпадающем меню кода найдите curl, и он сгенерирует аккуратный и чистый запрос curl для вас. Надеюсь это поможет

0
satyesht 27 Фев 2019 в 06:43

Попробуй это:

curl -X POST \
  http://localhost:8080/cat \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'name=Thidon&color=red%20%26%20white&tail_length=15&whiskers_length=12'

Вы забыли заголовок application/x-www-form-urlencoded, и тело не должно быть в формате json.

0
Mr.Turtle 27 Фев 2019 в 06:34