1.引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@SpringBootApplication
@EnableFeignClients
public class Springcloudclient2Application {
public static void main(String[] args) {
SpringApplication.run(Springcloudclient2Application.class, args);
}
}
2.传参
(1)多参(设置传输格式为键值对)
@FeignClient(name="client1")
public interface HelloFeignServer {
@GetMapping("/get111/{id}")
public String getget(@PathVariable int id,@RequestParam String name,@RequestParam String city);
@PostMapping(value = "/post111/{id}",consumes = "application/x-www-form-urlencoded")
public String postpost(@PathVariable int id,@RequestParam String name,@RequestParam String city);
}
@GetMapping("/get111/{id}")
public String ccc(@PathVariable int id,String name,String city){
System.err.println(name+" "+city);
return name+" "+city;
}
@PostMapping(value = "/post111/{id}")
public String ddd(@PathVariable int id,@RequestParam String name,@RequestParam String city){
System.err.println(name+" "+city);
return name+" "+city;
}
(2)多参(默认传输格式为json)
@FeignClient(name="client1")
public interface HelloFeignServer {
@GetMapping("/get111/{id}")
public String getget(@PathVariable int id,@RequestParam String name,@RequestParam String city);
@PostMapping(value = "/post111/{id}")
public String postpost(@PathVariable int id,@RequestBody String name,@RequestParam String city);
}
@GetMapping("/get111/{id}")
public String ccc(@PathVariable int id,String name,String city){
System.err.println(name+" "+city);
return name+" "+city;
}
@PostMapping(value = "/post111/{id}")
public String ddd(@PathVariable int id,@RequestBody String name,@RequestParam String city){
System.err.println(name+" "+city);
return name+" "+city;
}
(3)多参(get不支持实体类,post支持,所以get转json字符串传输)
@GetMapping("/get")
public String aaa(User user){
Map<String,Object> ma=new HashMap<>();
ma.put("key","get");
ma.put("user",user);
String obj= JSON.toJSONString(ma);
return helloFeignServer.getget(obj);
}
@PostMapping(value = "/post")
public String bbb(User user){
String key="post";
return helloFeignServer.postpost(user,key);
}
@FeignClient(name="client1")
public interface HelloFeignServer {
@GetMapping("/get111")
public String getget(@RequestParam String obj);
//@PostMapping(value = "/post111/{id}",consumes = "application/x-www-form-urlencoded")
@PostMapping(value = "/post111")
public String postpost(@RequestBody User user,@RequestParam String key);
}
@GetMapping("/get111")
public String ccc(@RequestParam String obj){
Map<String,Object> ma= JSON.parseObject(obj);
System.err.println(ma.get("user"));
System.err.println(ma.get("key"));
return "bbbbbbbbb";
}
@PostMapping(value = "/post111")
public String ddd(@RequestBody User user,@RequestParam String key){
System.err.println(user);
System.err.println(key);
return "aaaaaaaaaa";
}
这一篇写的很详细https://blog.youkuaiyun.com/justry_deng/article/details/80785973
总结就是消费者接口这边参数前不写,默认是RequestBody,然后最多只能有一个RequestBody,只要有就是POST,否则就是GET,写了RequestBody的参数服务提供者也要对应写RequestBody来接收,GET不提供实体类传输,要用json代替,POST可以。
3.feign 传递token
在feign调用的时候,向请求头里面添加需要传递的token,使用requestContextHolder获得HttpServletRequest,继承RequestInterceptor。书94页。