java duplicate parameter e_easyopen 参数无法正常传递现象解析

本文介绍了在使用EasyOpen时遇到的参数无法正常传递的问题。通过复现错误场景和阅读源码,发现在接口调用过程中,当@ApiDocField的属性名与参数类属性名不一致时,fastjson序列化导致参数获取失败。解决方案是确保注解属性名与参数类属性名匹配。
摘要由CSDN通过智能技术生成

正版2本grasshopper入门晋级手册

101.5元

包邮

(需用券)

去购买 >

3a9e48921ec5a68225fc746f9658e578.png

前言

近段时间在使用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,日志与结果截图如下

09ad568e3f5d382f90e0945bace499bb.png

375e499931b82d7512c371d8e893d987.png

​ 接口并未如文档定义一般拿到请求体的参数,场景复现。

寻找原因

​ 代码的好处是,0 即是 0,1 就是 1,如果 0 变成 1,那就是你写的 bug 或者你有意为之,这个场景必定有代码作为支撑。

​ 因为研读源码的经验较浅,所以一开始从框架打印日志入手。

75b2816dcf68d607e1e166b91e92e918.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值