Feign之复杂参数传递

疯一样的男子
疯一样的男子
发布于 2020-12-05 / 1 阅读
0
0

Feign之复杂参数传递

Feign如何传递复杂参数?

如:

1.小明提供的POST接口,接收的参数不是@RequstBody的,我要一个一个写@RequestParam,好繁琐啊;

2.小李提供的GET接口参数太多,又不能封装对象传给他,每一个参数都要写@RequestParam,好蛋疼啊。其实这些问题都不是问题,问题是很多同学没有去看官方文档,没有去看源码。其实SpringQueryMap(Spring cloud 、OpenFeign’s {@link feign.QueryMap})注解就可以解决问题,具体看源码吧。关于参数传递的原理,GET/POST等的知识网上有很多,这里就不提及了,现在旨在快速的帮你解决问题,尽快是完成工作。

示例一(GET)

例如小明同学提供的接口

  @RestController
  @RequestMapping("provider")
  @Slf4j
  public class ProviderController {
      @GetMapping("user")
      public User getUser(User user){
          log.info("user is {}",user);
          return user;
      }
  }

现在小王要通过Feign调用该接口,只需在参数前加入添加@@SpringQueryMap注解即可,如下

  @FeignClient(name = "provider", fallbackFactory = UserProviderFallback.class)
  public interface UserProvider {
      @getMapping(value = "/provider/user")
      User getUser(@SpringQueryMap User user);
  }

示例二(POST)

例如小明同学提供的接口

  @RestController
  @RequestMapping("provider")
  @Slf4j
  public class ProviderController {
      @PostMapping("user")
      public User getUser(User user){
          log.info("user is {}",user);
          return user;
      }
  }

现在小王要通过Feign调用该接口,只需添加@SpringQueryMap注解。当然,如果是用@RequestBody接收的,那就不要@SpringQueryMap,用@RequestBody即可,如下

  @FeignClient(name = "provider", fallbackFactory = UserProviderFallback.class)
  public interface UserProvider {
      @PostMapping(value = "/provider/user")
      User getUser(@SpringQueryMap User user);
  }

这两个示例都一样,只是把@getMapping和@PostMapping替换。


评论