Spring Cloud Feign 是怎么传递参数的

2020-03-25  本文已影响0人  zbsong

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

@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"),不然会抛出异常。

上一篇 下一篇

猜你喜欢

热点阅读