前后端知识交流分享Spring Cloud

Spring Cloud知识整理(一)

2018-08-02  本文已影响33人  AaronSimon

一、声明式调用Feign

1、Feign请求参数说明

  Feign是Netflix的产品,Spring Cloud Feign是在原生Feign的基础上进行了封装。由于Spring Cloud Feign引入了许多springmvc的注解,方便springmvc的使用者使用,但同时也给使用者带来了很大的混淆,下面我们简单讲解一下springmvc和Spring Cloud Feign的参数绑定机制。

1.1 SpringMVC请求参数绑定机制

  我们通过下面的例子进行讲解:

@RestController
public class demoController{
  @RequestMapping("hello")
  public String hello(String name){
    return "hello"+name;
  }
}

虽然接口很简单,但是SpringMVC在解析请求时为做了很多的事情

  1. @RequestMapping指定请求的路径映射,我们GET,POST,DELETE,PUT的请求都可以映射到这里;
  2. SpringMVC提供的参数注解包括@RequestParm,@RequestBody,@PathVariable等,在例子中我们的参数name被默认添加@RequestParm注解,SpringMVC使用字节码技术获取name这个名称,自动检测请求参数中key值为name的参数,如果我们的url请求或者form表单中包含name这个参数,就会被SpringMVC解析到。

1.2 Spring Cloud Feign请求参数绑定机制

  SpringMVC的参数绑定机制和Feign的参数绑定机制是不一样的。下面我们看一个错误的接口:

@ResstController
public class demoController{
  @RequestMapping(value="hello",method=RequsetMethod.GET)
  public String hello(String name){
    return "hello"+name;
  }

由于我们指定了请求方式GET,那么如果按照SpringMVC的参数绑定机制,name参数会被拼接在URL上,但是接口并未接收到,查看后台日志发现:

经过Google发现Feign的参数绑定机制与SpringMVC不同:

@ResstController
public class demoController{
  @RequestMapping(value="hello",method=RequsetMethod.GET)
  public String hello(@RequestBody Book book){
    return "hello"+book.getName();
  }
@ResstController
public class demoController{
  @RequestMapping(value="hello",method=RequsetMethod.GET)
  public String hello(@RequestParm Map map){
    return "hello"+map.get("name");
  }
@ResstController
public class demoController{
  @RequestMapping(value="hello",method=RequsetMethod.GET)
  public String hello(@RequestParm("name")String name){
    return "hello"+name;
  }

2、@FeignClient注解与参数

  @FeignClient注解被@Target(ElementType.TYPE)修饰,表明@FeignClient注解的作用在接口上

2.1 @FeignClient标签常用属性

待续

上一篇下一篇

猜你喜欢

热点阅读