美文网首页
Spring Cloud Feign 是怎么传递参数的

Spring Cloud Feign 是怎么传递参数的

作者: zbsong | 来源:发表于2020-03-25 17:02 被阅读0次

上一节的列子是不带参数的,下面来看一下Feign中几种不同形式参数的绑定方法。

  • 接着上一节的代码,修改服务提供方的FeignController类,新增几种接口定义
    1.带有Request参数的请求
    2.带有Header信息的请求
    3.带有RequestBody的请求以及请求响应体中是一个对象的请求。
@RestController
@RequestMapping(value = "/feign")
public class FeignController {

    @RequestMapping(value = "/test")
    public String testFeign() {
        return "Hello World";
    }

    @RequestMapping(value = "/testRequest")
    public String testRequest(@RequestParam String name) {
        return "您好," + name + ",我收到了你的请求,拿到了参数";
    }

    @RequestMapping(value = "/testHeader")
    public String testHeader(@RequestHeader String name) {
        return "您好" + name + ", 我已经从Header里面拿到了信息";
    }

    @RequestMapping(value = "/test")
    public String testFeign(@RequestBody User user) {
        return "收到用户对象信息,姓名:" + user.getName() + ", 住址:" + user.getAddress();
    }

}

4.新增User类

@Data
public class User {

    private String id;

    private String name;

    private String address;

}

5.继续使用上一节新建的消费者工程,修改Service方法

//使用@FeignClient注解指定服务名来绑定服务
@FeignClient("hello-client")
public interface FeignService {

    @RequestMapping(value = "/feign/test")
    String hello();

    @RequestMapping(value = "/feign/testRequest")
    String testRequest(@RequestParam(value = "name") String name);

    @RequestMapping(value = "/feign/testHeader")
    String testHeader(@RequestHeader(value = "name") String name);

    @RequestMapping(value = "/feign/testRequestBody")
    String testRequestBody(@RequestBody User user);

}

6.修改FeignController,新增test2接口

@RestController
@RequestMapping(value = "/feign")
public class FeignController {

    @Autowired
    FeignService feignService;

    @GetMapping(value = "/test")
    public String feignConsumer() {
        System.out.println("服务提供方返回数据为:" + feignService.hello());
        return feignService.hello();
    }

    @GetMapping(value = "/test2")
    public String feignConsumer2() {
        System.out.println(feignService.testRequest("Angelababy"));
        System.out.println(feignService.testHeader("Angelababy"));
        System.out.println(feignService.testRequestBody(
                new User()
                        .setId("id")
                        .setName("Angelababy")
                        .setAddress("俺也不知道")
        ));
        return "请求成功";
    }
}
测试

启动服务注册中心、服务提供方实例和消费者实例
访问:http://localhost:9000/feign/test2

image.png 我们可以看到服务提供者已经正确返回了我们希望看到的信息。

Feign中绑定参数必须通过value属性指明具体的参数名,比如@RequestParam(value = "name"),不然会抛出异常。

相关文章

网友评论

      本文标题:Spring Cloud Feign 是怎么传递参数的

      本文链接:https://www.haomeiwen.com/subject/oukxuhtx.html