Обязательный параметр String 'x' отсутствует - PullRequest
2 голосов
/ 09 мая 2019

У меня есть Spring API, который я не могу изменить, и пост слушатель выглядит так:

@PostMapping("upload")
    public String register(@RequestParam("x") String x, 
@RequestParam("y") String y) {//dostuff}

Теперь у меня есть другой Spring-boot API, который должен отправить запрос POST при создании ипочтовый запрос выглядит так:

  String response = 
(String) rest.postForObject(url,objectWrapper,String.class);

, а ObjectWrapper выглядит так:

public class ObjectWrapper {
   private String x;
   private String y;

  public ObjectWrapper(String x, String y) {
      this.x= x;
      this.y = y;
     }
 }

, когда вышеупомянутый почтовый запрос выполняется, он выдает исключение с моей стороны

org.springframework.web.client.HttpClientErrorException $ BadRequest: 400 null

При отправке из почтальона с помощью JSON / application, ошибка обязательна, параметр строки 'x' отсутствует.

Однако, когда x и y указаны в параметрах, а не в теле, оно успешно отправляется почтальоном.

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

  url + "/upload?x=test&y=test"

У меня вопрос, как я могу отправить две строки по запросу Post с моего сервера Spring на другой.Я не могу изменить слушателя.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Параметры, используемые как @RequestParam, являются параметрами запроса и не могут быть переданы в requestBody, как вы это сделали. Они должны быть добавлены в URL динамически. Это можно сделать следующим образом.

  String url = baseUrl + "/upload?x={x}&y={y}";

  Map<String, String> uriVariables = new HashMap();
  uriVariables.put("x", "valueForX");
  uriVariables.put("y", "valueForY");

  String response = rest.postForObject(url, null, String.class, uriVariables);

Здесь RequestBody имеет значение NULL, и, поскольку ваш API не принимает ни одного requestBody, он указан как null.

Документация по методу postForObject можно найти здесь .

Вы даже можете использовать Spring 101 * UriBuilder для создания URL-адреса с queryParams. Подробнее об этом можно прочитать в его документации здесь .

1 голос
/ 09 мая 2019

Я думаю, вы неправильно понимаете, что такое использование @RequestParam.Переменные должны быть в URL (/ upload? X = test & y = test в порядке), а не в теле.

Если вы хотите поместить эти переменные в тело, выберите формат (например,JSON), создайте объект, поместите json в тело и пометьте объект как @RequestBody:

@PostMapping("upload")
public String register(@RequestBody MyObj myObj) {//dostuff}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...