关于spring cloud接口参数的注意事项

 现在微服务在行业内应用非常广范,现在公司项目也是采用微服务的架构,实现半前后端分离,微服务采用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

以上是做项目碰到地坑,如有理解不到位,望大佬指定

原文地址:https://www.cnblogs.com/wjlstation/p/13620960.html