springboot使用feign访问api

标签: springboot feign
0人阅读 评论(0) 收藏 举报
分类:

本文主要介绍如何在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依赖

<dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-core</artifactId>
   <version>9.5.0</version>
</dependency>
<dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-slf4j</artifactId>
   <version>9.5.0</version>
</dependency>
<dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-hystrix</artifactId>
   <version>9.5.0</version>
</dependency>
<dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-jackson</artifactId>
   <version>9.5.0</version>
</dependency>

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<CnodeArticle> data;

    public boolean isSuccess() {
        return success;
    }

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

    public List<CnodeArticle> getData() {
        return data;
    }

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

查看评论

使用jMock辅助单元测试

使用jMock辅助单元测试作者:冰云 时间:2004-04-16联系:icecloud(AT)sina.comBlog:http://icecloud.51.netjMock是Junit的一个增强库。...
  • icecloud
  • icecloud
  • 2004-04-19 19:07:00
  • 3831

springboot调用外部接口FeignClient

springboot调用外部接口FeignClient
  • gisam
  • gisam
  • 2017-05-25 20:55:23
  • 7358

SpringBoot -- Feign 声明式web service

Feign 声明式web service Feign是一种基于HTTP的声明式、模板化的web service客户端 Spring Cloud Feign 通过@FeignClient(“r...
  • cwenao
  • cwenao
  • 2017-01-16 10:35:55
  • 7774

springboot 中feign访问api

https://github.com/OpenFeign/feign一、fein简介Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和W...
  • zhuchunyan_aijia
  • zhuchunyan_aijia
  • 2018-04-18 10:58:13
  • 18

SpringBoot -- 熔断机制 Circuit Breaker

Circuit Breaker 熔断机制在微服务中必不可少,比如故障发生时怎么处理 熔断:半熔断、熔断打开、熔断关闭 熔断关闭: 熔断关闭不会对服务进行...
  • cwenao
  • cwenao
  • 2017-01-17 09:55:13
  • 7847

springboot集成feign的自定义start

springboot集成feign的自定义start 分享一个项目: 项目地址:https://github.com/cumt-cx/spring-boot-lettelesd-feign...
  • cumt_cx
  • cumt_cx
  • 2018-01-23 16:41:05
  • 126

spring boot 使用feign

1、pom文件里,引入cloud包,与fegin的包。 org.springframework.cloud spring-cloud-...
  • fuhan2464
  • fuhan2464
  • 2017-08-25 09:48:19
  • 97

Spring Boot 微服务之间通过FeignClient进行大文件下载:

使用FeignClient作为中间件进行一个微服务之间的调用的时候,一般的服务请求是没有什么问题,但是,当下载大文件,会出现:java heap space 也就是堆溢出问题。 具...
  • LX928525166
  • LX928525166
  • 2017-12-08 16:50:50
  • 1052

Spring Boot开发问题(一.feignclient远程其他restful风格的项目时POST中)

POST远程其他restful风格的项目时,如果requestbody为Map之类的时候,后台用feignclient调用其他项目接口时报错,信息为 hashmap不是encoder支持的类型 本...
  • slience56
  • slience56
  • 2017-08-21 09:54:25
  • 438

springboot feign不能注入

在启动类上使用EnableFeignClients来开启Feign的功能。EnableFeignClients有个basePackages,配置上{&quot;org.noak&quot;}启动后测试...
  • qq_36531227
  • qq_36531227
  • 2018-03-24 12:02:48
  • 77
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 802
    排名: 6万+
    文章存档
    最新评论