1. 优势
可以使用maven 进行访问,实现代码的共享,减少跨服务调用服务编写的问题
2. 使用
定义接口
publicinterfaceIUserService{@RequestMapping(method =RequestMethod.GET, value ="/users/app",headers={"tenantid"})@ApiOperation(value ="发送短信通知",httpMethod ="GET", response =User.class,notes ="请保证传入字段正确")User getUser(@RequestParam("id")String id,@RequestHeader("tenantid")String tenantid);@RequestMapping(method =RequestMethod.GET, value ="/users/app2")User getUser2();@RequestMapping(method =RequestMethod.GET, value ="/users/app3")User getUser3();@RequestMapping(method =RequestMethod.POST, value ="/users/app3")User getUser4(@RequestBodyUser users);}
spring mvc rest 接口实现
@RestControllerpublicclassUserServiceFeignControllerimplementsIUserService{@AutowiredprivateUserserviceImpl userserviceImpl;@OverridepublicUser getUser2(){// TODO Auto-generated method stubreturn userserviceImpl.getUser2();}@OverridepublicUser getUser3(){// TODO Auto-generated method stubreturn userserviceImpl.getUser3();}@OverridepublicUser getUser(String id,@RequestHeader("tenantid")String tenantid){// TODO Auto-generated method stubreturn userserviceImpl.getUser(id, tenantid);}@OverridepublicUser getUser4(User users){// TODO Auto-generated method stubreturn users;}}
feign 跨服务调用
@FeignClient(url="http://localhost:8089/",name="userservicecall")publicinterfaceIFeignUserServiceextendsIUserService{}
注解
@SpringBootApplication@EnableFeignClients()publicclassApplication{publicstaticvoid main(String[] args){SpringApplication.run(Application.class, args);}}
调用
@RestControllerpublicclassUserCacheController{@AutowiredprivateIFeignUserService userservice;@RequestMapping(value ="/demo1", method =RequestMethod.GET)publicObject importUser(String id,@RequestHeader("tenantid")String tenantid)throwsExecutionException{return userservice.getUser(id,tenantid);}}
3. 注意问题
尽管使用接口继承,但是还是会发现部分参数是没法继承的类似 header 解决方法
调整rest 实现接口方法的签名,如下:
@OverridepublicUser getUser(String id,@RequestHeader("tenantid")String tenantid){// TODO Auto-generated method stubreturn userserviceImpl.getUser(id, tenantid);}
