Весенняя магия преобразования - PullRequest
1 голос
/ 17 июня 2020

У меня есть фрагмент кода, как показано ниже, для вызова одной из наших служб.

MultiValueMap<String, String> parametersMap = new LinkedMultiValueMap<>();
            parametersMap.add("query", query);
            parametersMap.add("locale", "en_US");
            parametersMap.add("resultsLimit", Boolean.FALSE.toString());
            parametersMap.add("maxResults", maxResults);
            parametersMap.add("type", "TTT");
            parametersMap.add("ids", commaSeparatedValues(ids));
            parametersMap.add("infoTypes", "HHH,JJJ");
            HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(parametersMap, getHttpHeaders());
            MyEntity myEntity = restTemplate.postForEntity("http://example.com", httpEntity, MyEntity.class);

А на стороне сервера код контроллера похож на

    @RequestMapping("my/service")
                public MyEntity suggest(@RequestParam(required = true) String query, @RequestParam(required = true) String locale,
@RequestParam(required = false) String resultsLimit, @Valid OtherOptions options) 

и OtherOption class похож на

class OtherOptions {
              String maxResults;
              String type;
              String ids;
              String infoTypes;
            }

Здесь все работает нормально, но я не понимаю, что такое.

  1. Это запрос на получение или отправку?
  2. Как Становятся ли некоторые из содержимого сопоставления параметров параметрами запроса (параметрами запроса), а некоторые другие сопоставлены с объектом OtherOptions?
  3. Что является фактическим телом запроса?

1 Ответ

1 голос
/ 17 июня 2020
  1. Это запрос на получение или отправку?

    Это запрос по почте. вы звоните restTemplate.postForEntity. Но ваш метод на стороне сервера не ограничен, поскольку вы не указали атрибут method для RequestMapping, поэтому тот же метод может обрабатывать любой метод http с точки сервера.

  2. Каким образом некоторые из содержимого сопоставления параметров становятся параметрами запроса (параметры запроса), а некоторые другие сопоставляются с объектом OtherOptions?

    Ни один из них не является параметрами запроса. См. Весеннюю документацию, чтобы узнать значение @RequestParam. В вашем случае все исходит из тела, а не как параметры запроса

    https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

    https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#postForEntity - java. net. URI- java .lang.Object- java .lang.Class-

    Тело объекта или сам запрос может быть MultiValueMap для создания составного запроса.

  3. Какое на самом деле тело запроса?

    parametersMap - это тело HTTP-запроса.

Примечание: в настоящее время ваш вызов должен завершиться ошибкой, потому что вы отправляете его на http://example.com на клиенте и слушаете на стороне сервера my/service

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