Я пытаюсь преобразовать вызов метода http GET с устаревшего API-сервера, построенного по шаблону MVC1, на новый сервер API с сохранением состояния без изменения внешнего исходного кода с помощью netflix zuul и eureka.
Я добавил zuul pre filter, преобразующий устаревший url в url restful Convention, работающий после PreDecorationFilter, и он работает нормально.
Но теперь я сталкиваюсь с проблемой преобразования метода GET в правильный метод, такой как POST, PUTУДАЛИТЬ, различая URL так, чтобы запросы правильно отображались в контроллере пружины через @ GetMapping / @ PostMapping / @ PutMapping / @ DeleteMapping.
Я посмотрел на SimpleRoutingFilter, который обрабатывает HttpClient, но из-за ограничений среды мне приходитсяиспользуйте eureka service id для маршрутизации на новый сервер API, и это означает, что я должен использовать RibbonRoutingFilter, что довольно сложно, чтобы найти правильное место для этой операции.
Итак, возможно ли изменить метод http или сделатьновый запрос http перед RibbonRoutingFilter?Если возможно, не могли бы вы подсказать, где находится правильное место для этого или какая-нибудь ссылка?
Большое спасибо!
======================================================================
Миленко Евремович,
Не могли бы вы рассказать подробнее об использовании Feign?
Я защищаю @FeignClient, как показано ниже
@PostMapping(value = "{url"}, consumes = "application/json")
ResponseEntity<?> postMethod(@PathVariable("url") String url);
и получить параметры запроса для запроса тела для POST В предварительном фильтре zuul,
после логики преобразования из URL-адреса запроса GET в новый URL-адрес восстановления POST ...
byte[] bytes = objectMapper.writeValueAsBytes(ctx.get("requestQueryParams"));
ctx.setRequests(new HttpServletRequestWrapper(request) {
@Override ..getMethod
@Override ..getContentLength
@Override ..getConentLengthLong
@Override
public ServletInputStream getInputStream() {
return new ServletInputStreamWrapper(bytes);
}
}
ResponseEntity<?> response feignClient.post(transformedNewApiUri);
и установите код RequestContext, которыйВы предложили ....
и контроллер нового сервера API, как,
@PostMapping
ResponseEntity<model> post(@RequestBody req..)
Это нормально для контроллера, но когда я вижу запрос http в методе post контроллера, естьнет тела запроса параметров.
(HttpServleterRequest getInputStream показывает пустой)
Набор данных запроса в предварительном фильтре zuul от HttpServletRequestWrapper не используется в Feign, может быть ...?Не могли бы вы дать мне больше идей по настройке тела запроса при изменении запроса GET на конструктор POST для использования Feign?