Jadual Kandungan
Pengenalan
Menggunakan
Penggunaan asas
Konfigurasi
ditukar kepada
全局超时时间
全局请求重试
Rumah Java javaTutorial Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot

Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot

May 12, 2023 am 11:55 AM
http springboot retrofit

Pengenalan

Retrofit ialah alat klien HTTP selamat jenis yang sesuai untuk Android dan Java, yang mempunyai 39k+Bintang di Github. Ciri terbesarnya ialah ia menyokong memulakan permintaan HTTP melalui antara muka, sama seperti cara kami menggunakan Feign untuk memanggil antara muka perkhidmatan mikro.

Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot

SpringBoot ialah rangka kerja pembangunan Java yang paling banyak digunakan, tetapi Retrofit secara rasminya tidak menyediakan Starter khusus. Jadi seorang lelaki tua telah membangunkan retrofit-spring-boot-starter, yang merealisasikan penyepaduan pantas rangka kerja Retrofit dan SpringBoot, dan menyokong banyak peningkatan fungsi, yang sangat memudahkan pembangunan. Hari ini kami akan menggunakan Starter pihak ketiga ini untuk mengendalikan Retrofit.

Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot

Menggunakan

Sangat mudah untuk menggunakan Retrofit dalam SpringBoot Mari kita alaminya di bawah.

Integrasi Kebergantungan

Dengan sokongan Starter pihak ketiga, penyepaduan Retrofit hanya mengambil satu langkah, cuma tambah kebergantungan berikut.

<!--Retrofit依赖-->
<dependency>
    <groupId>com.github.lianjiatech</groupId>
    <artifactId>retrofit-spring-boot-starter</artifactId>
    <version>2.2.18</version>
</dependency>
Salin selepas log masuk

Penggunaan asas

Mari kita ambil panggilan antara muka dalam mall-tiny-swagger sebagai contoh untuk mengalami penggunaan asas Retrofit.

Mula-mula kami menyediakan perkhidmatan untuk memudahkan panggilan jauh Kami menggunakan mall-tiny-swagger Demo Open Swagger dan lihat terdapat antara muka log masuk dan antara muka CRUD untuk jenama produk yang memerlukan pengesahan log masuk 🎜>

Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot

Mari cuba panggil antara muka log masuk dahulu, dan konfigurasikan alamat perkhidmatan

dalam application.yml;

remote:
  baseUrl: http://localhost:8088/
Salin selepas log masuk
mall-tiny-swagger kemudian isytiharkan satu melalui

Pelanggan Retrofit, memandangkan antara muka log masuk dipanggil melalui borang POST, anotasi

dan @RetrofitClient digunakan di sini @POST

/**
 * 定义Http接口,用于调用远程的UmsAdmin服务
 * Created by macro on 2022/1/19.
 */
@RetrofitClient(baseUrl = "${remote.baseUrl}")
public interface UmsAdminApi {
    @FormUrlEncoded
    @POST("admin/login")
    CommonResult<LoginInfo> login(@Field("username") String username, @Field("password") String password);
}
Salin selepas log masuk
@FormUrlEncoded Jika anda tidak begitu faham untuk tujuan anotasi ini, sila lihat. di bawah Anda pada asasnya boleh memahami jadual. Untuk butiran lanjut, anda boleh merujuk kepada dokumentasi Retrofit rasmi;

/**
 * Retrofit测试接口
 * Created by macro on 2022/1/19.
 */
@Api(tags = "RetrofitController", description = "Retrofit测试接口")
@RestController
@RequestMapping("/retrofit")
public class RetrofitController {
    @Autowired
    private UmsAdminApi umsAdminApi;
    @Autowired
    private TokenHolder tokenHolder;
    @ApiOperation(value = "调用远程登录接口获取token")
    @PostMapping(value = "/admin/login")
    public CommonResult<LoginInfo> login(@RequestParam String username, @RequestParam String password) {
        CommonResult<LoginInfo> result = umsAdminApi.login(username, password);
        LoginInfo loginInfo = result.getData();
        if (result.getData() != null) {
            tokenHolder.putToken(loginInfo.getTokenHead() + " " + loginInfo.getToken());
        }
        return result;
    }
}
Salin selepas log masuk

Untuk memudahkan panggilan berikutnya ke antara muka yang memerlukan pengesahan log masuk, saya mencipta kelas

dan menyimpan token dalam Sesi

/**
 * 登录token存储(在Session中)
 * Created by macro on 2022/1/19.
 */
@Component
public class TokenHolder {
    /**
     * 添加token
     */
    public void putToken(String token) {
        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
        request.getSession().setAttribute("token", token);
    }
    /**
     * 获取token
     */
    public String getToken() {
        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
        Object token = request.getSession().getAttribute("token");
        if(token!=null){
            return (String) token;
        }
        return null;
    }
}
Salin selepas log masuk
Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot Seterusnya, mengujinya melalui Swagger, dan anda boleh mendapatkan akses jauh dengan menghubungi antara muka Token yang dikembalikan oleh perkhidmatan tersedia Alamat akses: http://localhost:8086/swagger-ui/

UmsAdminApi

Anotasi. PemintasTokenHolder

Antara Muka Pengurusan Jenama Produk , anda perlu menambah pengepala pengesahan log masuk untuk akses biasa Kami boleh menggunakan pemintas anotasi dalam Retrofit untuk mencapai ini.

Mula-mula buat pemintas anotasi

warisi Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot, dan kemudian tambahkan pengepala

pada permintaan dalam kaedah

/**
 * 给请求添加登录Token头的拦截器
 * Created by macro on 2022/1/19.
 */
@Component
public class TokenInterceptor extends BasePathMatchInterceptor {
    @Autowired
    private TokenHolder tokenHolder;
    @Override
    protected Response doIntercept(Chain chain) throws IOException {
        Request request = chain.request();
        if (tokenHolder.getToken() != null) {
            request = request.newBuilder()
                    .header("Authorization", tokenHolder.getToken())
                    .build();
        }
        return chain.proceed(request);
    }
}
Salin selepas log masuk

Buat klien yang memanggil antara muka pengurusan jenama Pada klien

, gunakan anotasi

untuk mengkonfigurasi laluan pemintas dan pemintas

/**
 * 定义Http接口,用于调用远程的PmsBrand服务
 * Created by macro on 2022/1/19.
 */
@RetrofitClient(baseUrl = "${remote.baseUrl}")
@Intercept(handler = TokenInterceptor.class, include = "/brand/**")
public interface PmsBrandApi {
    @GET("brand/list")
    CommonResult<CommonPage<PmsBrand>> list(@Query("pageNum") Integer pageNum, @Query("pageSize") Integer pageSize);
    @GET("brand/{id}")
    CommonResult<PmsBrand> detail(@Path("id") Long id);
    @POST("brand/create")
    CommonResult create(@Body PmsBrand pmsBrand);
    @POST("brand/update/{id}")
    CommonResult update(@Path("id") Long id, @Body PmsBrand pmsBrand);
    @GET("brand/delete/{id}")
    CommonResult delete(@Path("id") Long id);
}
Salin selepas log masuk
TokenInterceptor kemudian masukkan contoh BasePathMatchInterceptor ke dalam Pengawal dan tambah kaedah untuk memanggil perkhidmatan jauh; ; doIntercept
/**
 * Retrofit测试接口
 * Created by macro on 2022/1/19.
 */
@Api(tags = "RetrofitController", description = "Retrofit测试接口")
@RestController
@RequestMapping("/retrofit")
public class RetrofitController {
    @Autowired
    private PmsBrandApi pmsBrandApi;
    @ApiOperation("调用远程接口分页查询品牌列表")
    @GetMapping(value = "/brand/list")
    public CommonResult<CommonPage<PmsBrand>> listBrand(@RequestParam(value = "pageNum", defaultValue = "1")
                                                        @ApiParam("页码") Integer pageNum,
                                                        @RequestParam(value = "pageSize", defaultValue = "3")
                                                        @ApiParam("每页数量") Integer pageSize) {
        return pmsBrandApi.list(pageNum, pageSize);
    }
    @ApiOperation("调用远程接口获取指定id的品牌详情")
    @GetMapping(value = "/brand/{id}")
    public CommonResult<PmsBrand> brand(@PathVariable("id") Long id) {
        return pmsBrandApi.detail(id);
    }
    @ApiOperation("调用远程接口添加品牌")
    @PostMapping(value = "/brand/create")
    public CommonResult createBrand(@RequestBody PmsBrand pmsBrand) {
        return pmsBrandApi.create(pmsBrand);
    }
    @ApiOperation("调用远程接口更新指定id品牌信息")
    @PostMapping(value = "/brand/update/{id}")
    public CommonResult updateBrand(@PathVariable("id") Long id, @RequestBody PmsBrand pmsBrand) {
        return pmsBrandApi.update(id,pmsBrand);
    }
    @ApiOperation("调用远程接口删除指定id的品牌")
    @GetMapping(value = "/delete/{id}")
    public CommonResult deleteBrand(@PathVariable("id") Long id) {
        return  pmsBrandApi.delete(id);
    }
}
Salin selepas log masuk
Authorization Panggil antara muka dalam Swagger untuk ujian dan mendapati ia boleh dipanggil dengan jayanya.

PmsBrandApi@Intercept

Pemintas global

PmsBrandApiJika anda ingin menambah pengepala permintaan pada semua permintaan, anda boleh menggunakan pemintas global.

Buat kelas

yang mewarisi antara muka

, dan kemudian tambahkan pengepala permintaan Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot dalam Pengepala.

/**
 * 全局拦截器,给请求添加source头
 * Created by macro on 2022/1/19.
 */
@Component
public class SourceInterceptor extends BaseGlobalInterceptor {
    @Override
    protected Response doIntercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request newReq = request.newBuilder()
                .addHeader("source", "retrofit")
                .build();
        return chain.proceed(newReq);
    }
}
Salin selepas log masuk

Konfigurasi

Retrofit mempunyai banyak konfigurasi di bawah kita akan bercakap tentang tiga konfigurasi yang paling biasa digunakan: pencetakan log, tamat masa global dan percubaan semula permintaan global.

SourceInterceptorBaseGlobalInterceptorPencetakan log Di bawah konfigurasi lalai, Retrofit menggunakan strategi log source dan log yang dicetak adalah sangat mudah; tambah

Atribut

ditukar kepada

untuk mencetak log yang paling lengkap;
retrofit:
  # 日志打印配置
  log:
    # 启用日志打印
    enable: true
    # 日志打印拦截器
    logging-interceptor: com.github.lianjiatech.retrofit.spring.boot.interceptor.DefaultLoggingInterceptor
    # 全局日志打印级别
    global-log-level: info
    # 全局日志打印策略
    global-log-strategy: body
Salin selepas log masuk

Selepas mengubah suai strategi pencetakan log, maklumat log lebih komprehensif; 🎜>

Retrofit menyokong empat strategi pencetakan log;

basic

TIADA: jangan cetak log; rekod permintaan log;

  • HEADERS:打印日志请求记录、请求和响应头信息;

  • BODY:打印日志请求记录、请求和响应头信息、请求和响应体信息。

  • 全局超时时间

    有时候我们需要修改一下Retrofit的请求超时时间,可以通过如下配置实现。

    retrofit:
      # 全局连接超时时间
      global-connect-timeout-ms: 3000
      # 全局读取超时时间
      global-read-timeout-ms: 3000
      # 全局写入超时时间
      global-write-timeout-ms: 35000
      # 全局完整调用超时时间
      global-call-timeout-ms: 0
    Salin selepas log masuk

    全局请求重试

    retrofit-spring-boot-starter支持请求重试,可以通过如下配置实现。

    retrofit:
      # 重试配置
      retry:
        # 是否启用全局重试
        enable-global-retry: true
        # 全局重试间隔时间
        global-interval-ms: 100
        # 全局最大重试次数
        global-max-retries: 2
        # 全局重试规则
        global-retry-rules:
          - response_status_not_2xx
          - occur_exception
        # 重试拦截器
        retry-interceptor: com.github.lianjiatech.retrofit.spring.boot.retry.DefaultRetryInterceptor
    Salin selepas log masuk

    重试规则global-retry-rules支持如下三种配置。

    • RESPONSE_STATUS_NOT_2XX:响应状态码不是2xx时执行重试;

    • OCCUR_IO_EXCEPTION:发生IO异常时执行重试;

    • OCCUR_EXCEPTION:发生任意异常时执行重试。

    Atas ialah kandungan terperinci Cara menggunakan alat klien HTTP Retrofit dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    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

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Cara menghidupkan semula rakan sepasukan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Apakah maksud kod status http 520? Apakah maksud kod status http 520? Oct 13, 2023 pm 03:11 PM

    Kod status HTTP 520 bermakna pelayan mengalami ralat yang tidak diketahui semasa memproses permintaan dan tidak dapat memberikan maklumat yang lebih khusus. Digunakan untuk menunjukkan bahawa ralat tidak diketahui berlaku semasa pelayan memproses permintaan, yang mungkin disebabkan oleh masalah konfigurasi pelayan, masalah rangkaian atau sebab lain yang tidak diketahui. Ini biasanya disebabkan oleh isu konfigurasi pelayan, isu rangkaian, kelebihan beban pelayan atau ralat pengekodan. Jika anda menghadapi ralat kod status 520, sebaiknya hubungi pentadbir tapak web atau pasukan sokongan teknikal untuk mendapatkan maklumat dan bantuan lanjut.

    Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Dec 29, 2023 am 11:02 AM

    SpringBoot dan SpringMVC adalah kedua-dua rangka kerja yang biasa digunakan dalam pembangunan Java, tetapi terdapat beberapa perbezaan yang jelas antara mereka. Artikel ini akan meneroka ciri dan penggunaan kedua-dua rangka kerja ini dan membandingkan perbezaannya. Mula-mula, mari belajar tentang SpringBoot. SpringBoot telah dibangunkan oleh pasukan Pivotal untuk memudahkan penciptaan dan penggunaan aplikasi berdasarkan rangka kerja Spring. Ia menyediakan cara yang pantas dan ringan untuk membina bersendirian, boleh dilaksanakan

    Fahami senario aplikasi biasa pengalihan halaman web dan fahami kod status HTTP 301 Fahami senario aplikasi biasa pengalihan halaman web dan fahami kod status HTTP 301 Feb 18, 2024 pm 08:41 PM

    Kuasai maksud kod status HTTP 301: Senario aplikasi biasa pengalihan halaman web Dengan perkembangan pesat Internet, keperluan orang ramai untuk interaksi halaman web menjadi lebih tinggi dan lebih tinggi. Dalam bidang reka bentuk web, pengalihan halaman web adalah teknologi biasa dan penting, dilaksanakan melalui kod status HTTP 301. Artikel ini akan meneroka maksud kod status HTTP 301 dan senario aplikasi biasa dalam pengalihan halaman web. Kod status HTTP301 merujuk kepada ubah hala kekal (PermanentRedirect). Apabila pelayan menerima pelanggan

    Cara menggunakan Pengurus Proksi Nginx untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Cara menggunakan Pengurus Proksi Nginx untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Sep 26, 2023 am 11:19 AM

    Cara menggunakan NginxProxyManager untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Dengan perkembangan Internet, semakin banyak laman web mula menggunakan protokol HTTPS untuk menyulitkan penghantaran data untuk meningkatkan keselamatan data dan perlindungan privasi pengguna. Memandangkan protokol HTTPS memerlukan sokongan sijil SSL, sokongan teknikal tertentu diperlukan semasa menggunakan protokol HTTPS. Nginx ialah pelayan HTTP yang berkuasa dan biasa digunakan dan pelayan proksi terbalik, dan NginxProxy

    Apakah kod status http 403? Apakah kod status http 403? Oct 07, 2023 pm 02:04 PM

    Kod status HTTP 403 bermakna pelayan menolak permintaan pelanggan. Penyelesaian kepada kod status http 403 ialah: 1. Semak kelayakan pengesahan Jika pelayan memerlukan pengesahan, pastikan kelayakan yang betul disediakan 2. Semak sekatan alamat IP, pastikan bahawa alamat IP klien adalah disenarai putih atau tidak disenaraihitamkan 3. Semak tetapan kebenaran fail Jika kod status 403 berkaitan dengan tetapan kebenaran fail atau direktori, pastikan klien mempunyai kebenaran yang mencukupi untuk mengakses fail atau direktori ini. dll.

    http meminta penyelesaian ralat 415 http meminta penyelesaian ralat 415 Nov 14, 2023 am 10:49 AM

    Penyelesaian: 1. Semak Content-Type dalam tajuk permintaan 2. Semak format data dalam badan permintaan 3. Gunakan format pengekodan yang sesuai 5. Semak sokongan sisi pelayan;

    Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Sep 12, 2023 pm 01:15 PM

    Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Dengan pembangunan Internet, fungsi muat turun fail telah menjadi salah satu keperluan asas bagi banyak laman web dan aplikasi. Untuk senario di mana berbilang fail perlu dimuat turun pada masa yang sama, kaedah muat turun segerak tradisional selalunya tidak cekap dan memakan masa. Atas sebab ini, menggunakan PHP untuk memuat turun berbilang fail secara tidak segerak melalui HTTP telah menjadi penyelesaian yang semakin biasa. Artikel ini akan menganalisis secara terperinci cara menggunakan HTTP tak segerak PHP melalui kes pembangunan sebenar.

    Masalah komunikasi dan keselamatan rangkaian biasa dan penyelesaian dalam C# Masalah komunikasi dan keselamatan rangkaian biasa dan penyelesaian dalam C# Oct 09, 2023 pm 09:21 PM

    Masalah dan penyelesaian komunikasi rangkaian dan keselamatan biasa dalam C# Dalam era Internet hari ini, komunikasi rangkaian telah menjadi bahagian yang sangat diperlukan dalam pembangunan perisian. Dalam C#, kami biasanya menghadapi beberapa masalah komunikasi rangkaian, seperti keselamatan penghantaran data, kestabilan sambungan rangkaian, dsb. Artikel ini akan membincangkan secara terperinci komunikasi rangkaian biasa dan isu keselamatan dalam C# dan menyediakan penyelesaian yang sepadan serta contoh kod. 1. Masalah komunikasi rangkaian Gangguan sambungan rangkaian: Semasa proses komunikasi rangkaian, sambungan rangkaian mungkin terganggu, yang boleh menyebabkan

    See all articles