#java #spring #spring-boot #jhipster #spring-cloud-feign
#java #весна #весенняя загрузка #jhipster #spring-cloud-симулировать
Вопрос:
Обычно в rest с нумерацией страниц есть методы с критериями и нумерацией страниц, мне нужно вызвать этот метод, используя подход Feign, но у меня ошибка:
Method has too many Body parameters
Мой вызов метода:
@RequestMapping(value = "/server/myRequest", method = RequestMethod.GET)
public ResponseEntity<String> getMyRequestByCriteriaClient(@RequestHeader("Authorization") String authHeader, CriteriaCustom criteria, Pageable pageable);
(CriteriaCustom — это простой pojo с получателем и установщиком)
На остальной стороне у меня есть:
@GetMapping("/myRequest")
public ResponseEntity<String> getMyRequestByCriteriaServer(CriteriaCustom criteria, Pageable pageable) {...}
Как я могу написать вызов на стороне клиента?
Я пытаюсь передать критерии и страницы в Map<String,Object> и @RequestParam, но они не поступают на сторону сервера.
Я не могу поверить, что невозможно использовать Feign для вызова и передачи критериев и нумерации страниц на сервер. Это просто ПОЛУЧИТЬ!!!
Ответ №1:
Это происходит потому, что вы передаете CriteriaCustom
and Pageable
как тело в запросе GET, который сервер с радостью проигнорирует. И в вашем случае есть два тела, отсюда и ошибка — Method has too many Body parameters
Так что либо вы можете передать их как Map<String, Object> RequestParams
, либо вы можете написать свой собственный кодировщик, который мог бы сделать это для всех ваших симуляций. Вы можете найти код здесь.
Комментарии:
1. Спасибо за ответ, но я не вижу решения в опубликованной вами ссылке. Например: что такое BaseRequest??? Я попробовал сопоставить<String, Object> и даже передать строку со всеми критериями (param1=alfaamp;param2=beta …), Но они передаются в кодированном виде (param1=alfa стал param1:lfa), и они неправильно просматриваются сервером.
2. Это был просто пример, чтобы вы начали. Итак, в принципе, вам нужно отражение, чтобы получить все пары ключ-значение из любого объекта, который вы передаете от клиента feign, и создать их как параметры запроса (Map<String, Object> ). BaseRequest представляет собой пример, который вам может понадобиться, а может и не понадобиться.