上一节的列子是不带参数的,下面来看一下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

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