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 中几种方式传递参数已成功

注解 参数形式 @RequestHeader(“param”) 如果有中文,要进行 URL 编码 放在请求的 Head 头中 @RequestParam(“param” GET 请求 @PathVariable(“param”) 请求路径上 @RequestBody POST 请求的 JSON 不知道 Form 表单

OpenFeign 的传参方式,简化了 RestTemplate 代码,这点跟 Mybatis 有点像,为什么 Mybatis 写个 Mapper 接口就能查询,是框架使用代理模式帮你完成的,这里的接口也是代理模式,框架帮忙实现的

经验分享 程序员 微信小程序 职场和发展