天天看點

Spring Boot Starter注解方式發送HTTP請求

前言

這是一個解決服務端發起http請求服務的架構。 由于開發人員的使用習慣不一樣,每個人都有可能寫出一套不同的HTTP請求util出來,而且使用的方式各不相同,還不能複用, 在用過Feign後,Feign支援比較好的是spring cloud,在不想用spring cloud的情況下,不如自己封裝一套Http請求的架構,即可解決代碼混亂的問題,又能優雅的開發。

架構的基本要求

  1.注解Interface(@RestClient),能用Spring依賴注入的方式來調用

  2.支援SpringMvc的注解如(@RequestMapping和@ResponseBody等)

  3.支援動态URL和參數傳入

  4.斷路保護

解決思路

  1.Spring啟動時,掃描@RestClient注解的Interface,生成代理的javabean

  2.使用RestTemplate來發送請求,減少架構的代碼量

  3.緩存執行過程的相關方法,避免多次建立javabean,提高請求效率

  4.提供請求的過濾器

寫了這些,還是上菜吧

maven注入(由于沒有上傳到maven倉庫,是以使用的小夥伴需要自己打包上傳到私服。可以想看cgcg-http-spring-boot-starter的簡單測試代碼)

<dependency>
    <groupId>com.cgcg</groupId>
    <artifactId>cgcg-http-spring-boot-starter</artifactId>
    <version>對應的版本号</version>
</dependency>
           

@RestClient的寫法

@RestClient(url = "https://your.domain/userCenter", fallback = TestClientImpl.class) //fallback 如果抛異常了會執行這個實作類的方法,且預設60秒内不再發起調用,避免頻繁抱錯,可以不配置
@MappingFilter(name = RequestFilter.class) //給這個類下面的全部請求添加過濾器,處理相關資料,可以自定義,也可以不寫
public interface TestClient {

    @PostMapping(value = "user")
    Map<String, Object> post(@RequestBody Map<String, Object> param,             
    @RequestParam("p1") String p1);
}
           

調用方式

@Resource
    private TestClient testClient;

    public Object result(String id) {
        HashMap<String, Object> param = new HashMap<>();
        param.put("haha", id);
        final Map<String, Object> objectMap = testClient.post(param, id);
        return objectMap;
    }
           

更詳細的實作可以看Github

GitHub連接配接:https://github.com/ZhicongLin/cgcg-base-starter/tree/master

繼續閱讀