一、Feign简介
1、Feign是一个声明式的web服务客户端,使用Feign编写web服务客户端更加容易
2、具有可插拔注解支持,包括Feign注解和JAX-RS注解,还支持可插拔的编码器与解码器
3、Spring Cloud 增加了对 Spring MVC的注解的支持,Spring Web 默认使用了HttpMessageConverters
4、Spring Cloud 集成了 Ribbon 和 Eureka,在使用Feign时提供负载均衡的HTTP客户端

二、导入依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

三、开启注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //开启Feign支持
public class ConsumerApplication { }

四、Feign入门示例
1、ProducerController——服务提供者,在mima-cloud-producer项目中

@RestController
public class ProducerController { @GetMapping("/get/{id}")
public String get(@PathVariable String id) {
return "hi,"+id;
} @GetMapping("/getuser/{id}")
public User getUser(@PathVariable String id) {
System.out.println("getUser.....");
User user = new User();
user.setId(id);
user.setName("wangwu" + id);
return user;
} @PostMapping("/postuser")
public User postUser(@RequestBody User user) {
System.out.println("postUser.....");
return user;
} @GetMapping("/getuser2")
public User getUser2(User user) {
System.out.println("getUser2.....");
return user;
} @GetMapping("/listAll")
public List<User> listAll(){
List<User> users = new ArrayList<User>();
users.add(new User("1","kevin1"));
users.add(new User("2","kevin2"));
users.add(new User("3","kevin3"));
return users;
}
}

以下代码在cloud-consumer-feign项目中
2、FeignTestClient——定义Feign客户端,声明式接口与ProducerController服务提供的方法一一对应

//定义Feign客户端,value参数为provider的serviceName。name参数实际是value的别名
//@FeignClient("mima-cloud-producer")与@FeignClient(name="mima-cloud-producer")本质相同
//@FeignClient(url="")参数已经作废,必须使用name属性
//如果设置url属性, 则name属性则只代表Feign客户端的别名,而不代表服务端的serviceName
@FeignClient(name="mima-cloud-producer")
public interface FeignTestClient { // 可以使用GetMapping组合注解,以前是不能使用的
@GetMapping(value = "/get/{id}")
// @PathVariable必须指定value,否则异常:PathVariable annotation was empty on param 0.
public String get(@PathVariable("id") String id); @RequestMapping(value = "/getuser/{id}")
public User getUser(@PathVariable("id") String id); // 调用远程的post方法,如果参数为复杂对象,就算指定了method=RequestMethod.GET,依然会使用post方式请求
// 远程的方法是get的时候就会失败,错误消息: status 405 reading FeignTestClient#getUser2(User); content:{"timestamp":1511326531240,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/getuser2"}
@RequestMapping(value = "/getuser2", method = RequestMethod.GET)
public User getUser2(User user); // 调用远程的post方法,可以使用@RequestBody
@RequestMapping(value = "/postuser")
public User postUser(@RequestBody User user); // 调用远程的post方法,可以不使用@RequestBody
@RequestMapping(value = "/postuser")
public User postUser2(User user); // 调用远程的post方法,如果参数为复杂对象,就算指定了method=RequestMethod.GET,依然会使用post方式请求
// 远程的方法也是post的,所以可以调用成功
@RequestMapping(value = "/postuser", method = RequestMethod.GET)
public User postUser3(User user); @GetMapping(value = "/listAll")
List<User> listAll();
}

3、FeignTestController——调用Feign客户端

@RestController
public class FeignTestController { @Autowired
private FeignTestClient feignTestClient; @GetMapping("/feign/get/{id}")
public String get(@PathVariable String id) {
String result = feignTestClient.get(id);
return result;
} @GetMapping("/feign/getuser/{id}")
public User getUser(@PathVariable String id) {
User result = feignTestClient.getUser(id);
return result;
} @GetMapping("/feign/getuser2")
public User getUser2(User user) {
User result = feignTestClient.getUser2(new User());
return result;
} @GetMapping("/feign/listAll")
public List<User> listAll() {
return feignTestClient.listAll();
} @PostMapping("/feign/postuser")
public User postUser(@RequestBody User user) {
User result = feignTestClient.postUser(user);
return result;
} @PostMapping("/feign/postuser2")
public User postUser2(@RequestBody User user) {
User result = feignTestClient.postUser2(user);
return result;
} @PostMapping("/feign/postuser3")
public User postUser3(@RequestBody User user) {
User result = feignTestClient.postUser3(user);
return result;
} }

4、开启Feign注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //开启Feign支持
public class ConsumerApplication { public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
} }

Feign快速入门的更多相关文章

  1. Spring Cloud 快速入门

     Spring Cloud快速入门 代码地址: https://gitee.com/gloryxu/spring-cloud-test EureKa:服务注册中心 添加依赖 <dependenc ...

  2. SpringBoot系列: RestTemplate 快速入门

    ====================================相关的文章====================================SpringBoot系列: 与Spring R ...

  3. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  4. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  5. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  6. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  7. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

随机推荐

  1. git的一些常用操作

    一.克隆默认分支 git clone 远程地址 二.克隆某一分支 git clone -b 分支名 远程地址 三.切换分支 git branch 分支名 四.一般开发提交的流程 1).查看本地状态 g ...

  2. 多进程和mongo的配合使用

    这篇文章主要是讲在多线程下使用mongo数据库的一个报错,算是一个警告,如下: /usr/lib64/python2.6/site-packages/pymongo/topology.py:75: U ...

  3. springboot项目新功能开发

    在原有的springboot项目上,复制了一个,然后将其中的src下的所有java文件都删除,gradle下把中间件都删除,直流springframework的,重新启动,发现 错误Failed to ...

  4. Day02 (黑客成长日记)

    #用户登录次数为三代码 # i = 0 # while i < 3: # username = input('请输入账号:') # password = input('请输入密码:') # if ...

  5. Paper | Batch Normalization

    目录 1. PROBLEM 1.1. Introduction 1.2. Analysis 2. SOLUTION 2.1. Batch Normalization 及其问题 2.2. 梯度修正及其问 ...

  6. VP-UML系统建模工具研究

    一.基本信息 标题:VP-UML系统建模工具研究 时间:2014 出版源:软件工程师 领域分类:面向对象:CASE:UML:系统建模: 二.研究背景 问题定义:VP-UML系统建模的主要特点 难点:运 ...

  7. [opentwebst]一个简单的登陆脚本

    这个是个简单的vbs脚本,使用opentwebst进行录制 'Use the command line below to launch the script (or just double click ...

  8. 去除swagger ui的红色 error 错误提示

    去除swagger ui的红色 error 错误提示 自定义js文件中加入以下的代码. 加入自定义的js方法看这里 http://www.cnblogs.com/wang2650/archive/20 ...

  9. Repository 简化实现多条件查询

    Repository 在做查询的时候,如果查询条件多的话,linq查询表达式会写的很复杂,比如: public IQueryable<Student> Get(int id, string ...

  10. “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...