Kami menggunakan Feign untuk meminta perkhidmatan lain dalam SpringCloud apabila menggunakan antara muka Api, terdapat keperluan untuk lulus parameter dalam pengepala Jika tiada pemprosesan khas dilakukan, parameter dalam pengepala akan hilang.
Pilihan 1: Lulus @RequestHeader(name = "headerName")
Contohnya: Feign ditakrifkan seperti berikut
@FeignClient(name = "service-name") public interface XXXFeignClient { @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET) String getUserTicket(@RequestParam("id") String id); }
Anggap bahawa dalam perkhidmatan Antara muka /user/getUserTicket dalam nama perkhidmatan perlu mendapatkan data Perujuk daripada Pengepala, kemudian kita boleh mengubah suai kod di atas:
@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); }
dan kemudian hantar parameter perujuk semasa memanggil, seperti
public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) { String referer = request.getHeader("Referer"); return xxxFeignClient.getUserTicket(id, referer); }
Pilihan 2: Dengan melaksanakan antara muka RequestInterceptor
Mula-mula, sesuaikan kaedah guna yang melaksanakan antara muka RequestInterceptor, seperti berikut
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); } } } }
Kemudian konfigurasikan kelas konfigurasi tersuai ke dalam Feign, dan itu sahaja Pemindahan parameter Pengepala antara muka dalam Feign boleh direalisasikan
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class) public interface XXXFeignClient { }
Atas ialah kandungan terperinci Bagaimanakah SpringBoot melepasi parameter dalam Pengepala melalui panggilan Feign?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!