天天看点

Spring Cloud 学习笔记 —— OpenFeign 参数传递9.3 OpenFeign 参数传递

9.3 OpenFeign 参数传递

OpenFeign 传递参数,一定要绑定参数名,即有参数要加上 @RequestParam 注解,如果通过 Header 来传递参数,一定要中文转码,测试 provider 服务中的接口

Spring Cloud 学习笔记 —— OpenFeign 参数传递9.3 OpenFeign 参数传递
  • (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)启动服务,测试接口
    Spring Cloud 学习笔记 —— OpenFeign 参数传递9.3 OpenFeign 参数传递
Spring Cloud 学习笔记 —— OpenFeign 参数传递9.3 OpenFeign 参数传递

openfeign中

Spring Cloud 学习笔记 —— OpenFeign 参数传递9.3 OpenFeign 参数传递

provider 中

Spring Cloud 学习笔记 —— OpenFeign 参数传递9.3 OpenFeign 参数传递

总结

至此在 OpenFeign 中几种方式传递参数已成功

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

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

继续阅读