Как я могу получить параметры весной из запроса curl -X? - PullRequest
0 голосов
/ 27 февраля 2019

У меня проблема с обработкой параметров из запроса 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 "{\" name \ ": \" Tihon \ ", \" color \ ": \"red & white \ ", \" tail_length \ ": 15, \" whiskers_length \ ": 12}"

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

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

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

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Попробуйте:

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 голосов
/ 27 февраля 2019
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 голосов
/ 27 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...