J'essaie de transformer l'appel de la méthode http GET d'un ancien serveur api construit avec le modèle MVC1 en un nouveau serveur api reposant sans aucun changement du code source frontal en utilisant netflix zuul et eureka.
J'ai ajouté le pré-filtre zuul transformant l'url legacy en url convention restful fonctionnant après le PreDecorationFilter et cela fonctionne bien.
Mais maintenant, je suis confronté au problème de convertir la méthode GET en méthode appropriée comme POST, PUT, DELETE en distinguant l'url afin que les requêtes soient correctement mappées dans le contrôleur Spring via @GetMapping/@PostMapping/@PutMapping/@DeleteMapping.
J'ai examiné SimpleRoutingFilter qui gère HttpClient mais En raison d'une contrainte environnementale, je dois utiliser l'identifiant de service eureka pour acheminer les données vers le nouveau serveur api et cela signifie que je dois utiliser RibbonRoutingFilter, ce qui est assez compliqué pour trouver le bon endroit où effectuer cette opération.
Est-il possible de changer la méthode http ou de faire une nouvelle requête http avant le RibbonRoutingFilter ? Si c'est possible, pouvez-vous nous indiquer le bon endroit pour le faire ou une référence ?
Merci beaucoup !
\======================================================================
Milenko Jevremovic,
Pourriez-vous me donner plus de détails sur l'utilisation de Feign ?
J'ai défini @FeignClient comme suit
@PostMapping(value = "{url"}, consumes = "application/json")
ResponseEntity<?> postMethod(@PathVariable("url") String url);
et pour obtenir les paramètres de la requête dans le corps de la demande pour le pré-filtre POST In zuul,
après avoir transformé la logique de la demande d'url GET en nouvelle url reposante 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);
et définir le code RequestContext que vous avez suggéré ....
et le contrôleur du nouveau serveur api est comme,
@PostMapping
ResponseEntity<model> post(@RequestBody req..)
Il arrive bien au contrôleur mais quand je vois la requête http dans la méthode post du contrôleur, Il n'y a pas de corps de requête pour les paramètres.
(HttpServleterRequest getInputStream montre vide)
Les données de requête définies dans le pré-filtre zuul par HttpServletRequestWrapper ne sont pas pas utilisées dans Feign peut-être... ? Pourriez-vous me donner plus d'idée sur la définition du corps de la requête lors du passage de la requête GET en constructeur POST pour utiliser Feign ?