现在微服务在行业内应用非常广范,现在公司项目也是采用微服务的架构,实现半前后端分离,微服务采用fegin暴露接口,谈谈接口定义以及调用踩到的几个坑:
1、服务提供
定义接口端
@Api(value = "Client接口")
@FeignClient(name = "xxx-service-${service.version}/${.version}/xxx")
public interface XxxServiceClient {
}
@RequestMapping("/list")
public Page<xxx> list(@RequestBody FeignParam<xxx> paramFeignParam,@RequestParam(value="billFlag",required=false) String billFlag);
@RequestMapping("/get")
public xxxget(@RequestParam("id") long id);
}
1、接口定义包括RequestMapping、 postMapping、 getMapping ,对于post请求采用postMapping注解,如果get请求定义了postMapping为报
Method findById not annotated with HTTP method type (ex. GET, POST),可以采用RequestMapping ,method=get
2、传入的方法参数定义加requestParam注解,如果不加默认的是requestPost,但如果传入时 get,那么接收到的参数值为null,所以一定要加@requestParam
但是加了@requestParam,如果没有加注解的参数,如("id"),或者value=("id"),那么启动时会报错RequestParam.value() was empty on parameter 0,
但如果加了在项目打包时听说参数名称会变化,导致有些服务调用时会报参数不存在。只样只能把注解的参数名称去掉
第二个参数是required,默认是 true,必传,如果为空会报错,所以需要改为required=false
3、如果参数是Map时只能加@RequestParam,不需要加参数,如果加了(“ ”)参数也会报找不到变量,因为map传进来名称会有些变化,不是map名
二、服务消费者
服务消费者一盘是在前端的controller层,本身是一个requestMapping或者postMapping方法,方法里面必须添加@requestParam注解,否则在调用fegin接口时,变量在controller有值,但传到接口后端显示null
以上是做项目碰到地坑,如有理解不到位,望大佬指定