Rumah >Java >javaTutorial >Bagaimanakah SpringBoot melepasi parameter dalam Pengepala melalui panggilan Feign?

Bagaimanakah SpringBoot melepasi parameter dalam Pengepala melalui panggilan Feign?

PHPz
PHPzke hadapan
2023-05-16 20:38:072711semak imbas

[SpringBoot] Lulus parameter Pengepala melalui panggilan Feign

Cara untuk menghantar parameter Pengepala melalui Feign

Perihalan Masalah

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.

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam