springboot使用feign访问api

本文主要介绍如何在springboot项目中使用feign来访问cnode中文公共api接口


一、fein简介

Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket。Feign最初是为了降低统一绑

定Denominator到HTTP API的复杂度,不区分是否支持Restful。Feign旨在通过最少的资源和代码来实现和HTTP API的连接。通过可

定制的解码器和错误处理,可以编写任意的HTTP API。

github:https://github.com/OpenFeign/feign

二、feign使用步骤

1、增加pom依赖


   io.github.openfeign
   feign-core
   9.5.0


   io.github.openfeign
   feign-slf4j
   9.5.0


   io.github.openfeign
   feign-hystrix
   9.5.0


   io.github.openfeign
   feign-jackson
   9.5.0

2、application.properties增加基础url

application.cnode.url=https://cnodejs.org


3、写访问api的接口

@Headers("Content-Type:application/json")
public interface NodeClient {
    @RequestLine("GET /api/v1/topics?page={page}&tab={tab}&limit={limit}&mdrender={mdrender}")
    CnodeTopicsResponse getTopics(@Param("page") int page,@Param("tab") String tab,
                                  @Param("limit")int limit,@Param("mdrender") String mdrender);
}
4、使用注解,配置NodeClient,并设置等候响应时间

@Configuration
public class NodeConfig {
    @Value("${application.cnode.url}")
    private String baseUrl;

    @Bean
    NodeClient nodeClient() throws InterruptedException {
        return HystrixFeign.builder()
                .decoder(new JacksonDecoder())
                .encoder(new JacksonEncoder())
                .setterFactory((target, method) ->
                        new SetterFactory.Default().create(target, method).
                                andCommandPropertiesDefaults(HystrixCommandProperties.defaultSetter().
                                        withExecutionTimeoutInMilliseconds(10000)))
                .target(NodeClient.class, this.baseUrl);
    }
}
5、配置controller

@RestController
@CrossOrigin
public class NodeController {
    private NodeClient nodeClient;
    @Autowired
    public NodeController(final NodeClient nodeClient) {
        this.nodeClient = nodeClient;
    }

    @RequestMapping(value = "/node",method = RequestMethod.GET)
    public CnodeTopicsResponse get(CnodeTopicsRequest cnodeTopicsRequest){
        return nodeClient.getTopics(cnodeTopicsRequest.getPage(),
                cnodeTopicsRequest.getTab(),
                cnodeTopicsRequest.getLimit(),
                cnodeTopicsRequest.getMdrender());
    }

}

6、其中CnodeTopicsRequest和CnodeTopicsResponse如下

public class CnodeTopicsRequest {
    private Integer page;
    private String tab;
    private Integer limit;
    private String mdrender;

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Integer getLimit() {
        return limit;
    }

    public void setLimit(Integer limit) {
        this.limit = limit;
    }

    public String getTab() {
        return tab;
    }

    public void setTab(String tab) {
        this.tab = tab;
    }


    public String getMdrender() {
        return mdrender;
    }

    public void setMdrender(String mdrender) {
        this.mdrender = mdrender;
    }
}
public class CnodeTopicsResponse {
    private boolean success;
    private List data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }
}
6、然后启动application,访问链接: http://localhost:8080/node?page=1&limit=100&tab=&mdrender=false


你可能感兴趣的:(springboot)