Lorsque nous utilisons Feign pour demander l'interface API d'un autre service dans SpringCloud, il est nécessaire de transmettre les paramètres dans l’en-tête Si aucun traitement spécial n’est effectué, les paramètres de l’en-tête seront perdus.
Option 1 : Passer @RequestHeader(name = "headerName")
Par exemple : Feign est défini comme suit
@FeignClient(name = "service-name") public interface XXXFeignClient { @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET) String getUserTicket(@RequestParam("id") String id); }
Supposons que l'interface /user/getUserTicket dans le service nom-service doit obtenir le référent à partir des données d'en-tête, nous pouvons alors transformer le code ci-dessus :
@FeignClient(name = "service-name") public interface XXXFeignClient { @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET) String getUserTicket(@RequestParam("id") String id, @RequestHeader(name = "Referer") String referer); }
Ensuite, transmettez simplement le paramètre referer lors de l'appel, tel que
public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) { String referer = request.getHeader("Referer"); return xxxFeignClient.getUserTicket(id, referer); }
Solution 2 : en implémentant l'interface RequestInterceptor
Tout d'abord, personnalisez la méthode apply qui implémente le Interface RequestInterceptor , comme suit
import org.springframework.stereotype.Configuration; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Enumeration; @Configuration public class FeignConfiguration implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); Enumeration<String> headerNames = request.getHeaderNames(); if (headerNames != null) { while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); String values = request.getHeader(name); requestTemplate.header(name, values); } } } }
Ensuite, configurez la classe de configuration personnalisée dans Feign pour réaliser le transfert des paramètres d'en-tête de l'interface dans Feign
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class) public interface XXXFeignClient { }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!