Rumah > Java > javaTutorial > teks badan

Bagaimanakah SpringBoot melepasi parameter dalam Pengepala melalui panggilan Feign?

PHPz
Lepaskan: 2023-05-16 20:38:07
ke hadapan
2561 orang telah melayarinya

[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);
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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);
    }
Salin selepas log masuk

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);
            }
        }
    }
}
Salin selepas log masuk

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 {
    }
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan