• spring cloud feign 接口继承以及参数传递的问题


    1. 优势
     
      可以使用maven 进行访问,实现代码的共享,减少跨服务调用服务编写的问题
     
    2. 使用
     
       定义接口
       
    1. publicinterfaceIUserService{
    2. @RequestMapping(method =RequestMethod.GET, value ="/users/app",headers={"tenantid"})
    3. @ApiOperation(value ="发送短信通知",httpMethod ="GET", response =User.class,notes ="请保证传入字段正确")
    4. User getUser(@RequestParam("id")String id,@RequestHeader("tenantid")String tenantid);
    5. @RequestMapping(method =RequestMethod.GET, value ="/users/app2")
    6. User getUser2();
    7. @RequestMapping(method =RequestMethod.GET, value ="/users/app3")
    8. User getUser3();
    9. @RequestMapping(method =RequestMethod.POST, value ="/users/app3")
    10. User getUser4(@RequestBodyUser users);
    11. }
    spring mvc rest  接口实现
     
     
    1. @RestController
    2. publicclassUserServiceFeignControllerimplementsIUserService{
    3. @Autowired
    4. privateUserserviceImpl userserviceImpl;
    5. @Override
    6. publicUser getUser2(){
    7. // TODO Auto-generated method stub
    8. return userserviceImpl.getUser2();
    9. }
    10. @Override
    11. publicUser getUser3(){
    12. // TODO Auto-generated method stub
    13. return userserviceImpl.getUser3();
    14. }
    15. @Override
    16. publicUser getUser(String id,@RequestHeader("tenantid")String tenantid){
    17. // TODO Auto-generated method stub
    18. return userserviceImpl.getUser(id, tenantid);
    19. }
    20. @Override
    21. publicUser getUser4(User users){
    22. // TODO Auto-generated method stub
    23. return users;
    24. }
    25. }
    feign 跨服务调用
     
    1. @FeignClient(url="http://localhost:8089/",name="userservicecall")
    2. publicinterfaceIFeignUserServiceextendsIUserService{
    3. }
    注解
    1. @SpringBootApplication
    2. @EnableFeignClients()
    3. publicclassApplication{
    4. publicstaticvoid main(String[] args){
    5. SpringApplication.run(Application.class, args);
    6. }
    7. }
    调用
    1. @RestController
    2. publicclassUserCacheController{
    3. @Autowired
    4. privateIFeignUserService userservice;
    5. @RequestMapping(value ="/demo1", method =RequestMethod.GET)
    6. publicObject importUser(String id,@RequestHeader("tenantid")String tenantid)throwsExecutionException{
    7. return userservice.getUser(id,tenantid);
    8. }
    9. }
    3. 注意问题
       尽管使用接口继承,但是还是会发现部分参数是没法继承的类似 header 解决方法
       调整rest 实现接口方法的签名,如下:
      
    1. @Override
    2. publicUser getUser(String id,@RequestHeader("tenantid")String tenantid){
    3. // TODO Auto-generated method stub
    4. return userserviceImpl.getUser(id, tenantid);
    5. }
     
      
     
  • 相关阅读:
    如何解决快应用堆栈溢出问题
    华为携手Work Shift Calendar (Shifter),将工作效率提升至更高水平
    教你如何实现长按图片保存到相册
    【DTM】HUAWEI Ads与DTM网页转化追踪(二)
    map组件如何展示marker的callout气泡
    【DTM】HUAWEI Ads与DTM网页转化追踪(一)
    “碰一碰”版本的蓝牙键盘,来啦!
    ES-密码设置及JAVA应用
    ES--集群搭建及原理
    ES--ELK搭建(ElasticSearch、Logstash、Kibana)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/6653991.html
Copyright © 2020-2023  润新知