MyProviderClient.java 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.sf.remote;
  2. import com.sf.dto.UserDto;
  3. import org.springframework.cloud.openfeign.FeignClient;
  4. import org.springframework.web.bind.annotation.*;
  5. import java.util.Map;
  6. // 使用注解@FeignClient 来声明接口对应的服务名
  7. //@LoadBalancerClient(name = "service-provider-demo",
  8. // configuration = NacosLoadBalancerConfig.class)
  9. @FeignClient("service-provider-demo")
  10. public interface MyProviderClient {
  11. // 通过一系列的注解配置 可以映射为当前方法对应的远程调用地址为
  12. // http://service-provider-demo/echo/{string}
  13. // 此时的入参是方法的入参 返回结果是方法的结果
  14. // String result = restTemplate.getForObject("http://service-provider-demo/echo/{string}", String.class, str);
  15. // 本质上 是对restTemplate更上层的封装
  16. // 把远程服务中的接口声明 放在当前接口类中
  17. @GetMapping("/echo/{string}")
  18. String echo(@PathVariable("string") String string);
  19. // String result = restTemplate.getForObject("http://service-provider-demo/random/{range}", String.class, range);
  20. @GetMapping("/random/{range}")
  21. String random(@PathVariable("range") int range);
  22. @GetMapping("/testParam")
  23. String testParam(@RequestParam("param") String param);
  24. // 在传递多个参数时 不能直接通过类对象传输
  25. @GetMapping("/testMultiParam")
  26. String testMultiParam(UserDto userDto);
  27. // 第一种解决方案是 把参数拆解出来
  28. @GetMapping("/testMultiParam")
  29. String testMultiParam(@RequestParam("name") String name, @RequestParam("age") Integer age);
  30. // 第二种解决方案是
  31. @GetMapping("/testMultiParam")
  32. String testMultiParam(@RequestParam Map<String,Object> map);
  33. @PostMapping("/postUser")
  34. String postUser(@RequestBody UserDto user);
  35. // 通过openFeign调用其他微服务时 怎么携带请求头
  36. // 第一种 直接写在方法的注解中
  37. @GetMapping(value = "/token",headers = {"token=123456"})
  38. String token();
  39. // 第二种 方法入参中使用@RequestHeader
  40. @GetMapping("/token")
  41. String token(@RequestHeader("token") String token);
  42. // 第三种 使用Feign拦截器
  43. @GetMapping("/token")
  44. String tokenByInterceptor();
  45. }