正版2本grasshopper入门晋级手册
101.5元
包邮
(需用券)
去购买 >
前言
近段时间在使用easyopen时,发现定义的请求体与实际参数不符时会出现参数无法正常传递的现象,于是就把easyopen的源码 clone 下来研究了一波。
easyopen 测试版本1.16.6.1
场景复现请求体定义如下public class GoodsParam {
@ApiDocField(description = "商品名称", required = true, example = "iphoneX", name = "goods")
private String goodsName;
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
}接口定义如下@ApiService
@ApiDoc("商品模块")
public class GoodsApi {
private static final Logger log = LoggerFactory.getLogger(GoodsApi.class);
@Api(name = "goods.get")
@ApiDocMethod(description = "获取商品")
public String getGoods(GoodsParam param) {
log.info("incoming param: {}", JSONObject.toJSONString(param));
return param.getGoodsName();
}
}
上述代码使用官方示例修改。
因为我是要复现出错的场景,所以我对请求体属性 goodsName 进行修改,并修改原有接口逻辑,使得接口打印请求体数据并直接返回请求体 goodsName 属性。
启动项目,请求接口 goods.get,日志与结果截图如下
接口并未如文档定义一般拿到请求体的参数,场景复现。
寻找原因
代码的好处是,0 即是 0,1 就是 1,如果 0 变成 1,那就是你写的 bug 或者你有意为之,这个场景必定有代码作为支撑。
因为研读源码的经验较浅,所以一开始从框架打印日志入手。