feign

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页。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值