Spring Cloud 学习笔记 —— OpenFeign 参数传递
9.3 OpenFeign 参数传递
OpenFeign 传递参数,一定要绑定参数名,即有参数要加上 @RequestParam 注解,如果通过 Header 来传递参数,一定要中文转码,测试 provider 服务中的接口
-
(1)在 provider 服务中定义接口如下:
@RestController public class HelloController{ @Value("${server.port}") Integer port; @RequestMapping("/hello") public String hello(){ return "hello " + port; } @GetMapping("/hello2") public String hello2(String name){ System.out.println(new Date() + ">>> " + name); return "hello" + name; } @PostMapping("/user2") public User addUser2(@RequestBody User user){ return user; } @DeleteMapping("/user2/{id}") public void deleteUser2(@PathVariable Integer id){ System.out.println(id); } @GetMapping("/user3") public void getUserByName(@RequestHeader("name") String name) throws UnsupportedEncodingException { System.out.println(URLDecoder.decode(name,"UTF-8")); } }
-
(2)在 openfeign 中 HelloService
@FeignClient(value = "provider") public interface HelloService { @RequestMapping("/hello") String hello(); @GetMapping("/hello2") String hello2(@RequestParam("name") String name); @PostMapping("/user2") User addUser2(@RequestBody User user); @DeleteMapping("/user2/{id}") void deleteUser2(@PathVariable("id") Integer id); @GetMapping("/user3") void getUserByName(@RequestHeader("name") String name) throws UnsupportedEncodingException; }
-
(2)在 openfeign 中定义 HelloController,来调用 HelloService
@RestController public class HelloController { @Autowired HelloService helloService; @GetMapping("/hello") public String hello() throws UnsupportedEncodingException { String hello = helloService.hello(); System.out.println(hello); String s = helloService.hello2("江南一点雨"); System.out.println(s); User user = new User(); user.setId(1); user.setUsername("javaboy"); user.setPassword("123"); User user1 = helloService.addUser2(user); System.out.println(user1); helloService.deleteUser2(1); helloService.getUserByName(URLEncoder.encode("江南一点雨","UTF-8")); return hello; } }
-
(3)启动服务,测试接口
openfeign中 provider 中
总结
至此在 OpenFeign 中几种方式传递参数已成功
OpenFeign 的传参方式,简化了 RestTemplate 代码,这点跟 Mybatis 有点像,为什么 Mybatis 写个 Mapper 接口就能查询,是框架使用代理模式帮你完成的,这里的接口也是代理模式,框架帮忙实现的