8000 针对1.1.0release版本中出现wrong number of arguments以及其衍生问题的处理。 by JKTerrific · Pull Request #16 · Sayi/swagger-dubbo · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

针对1.1.0release版本中出现wrong number of arguments以及其衍生问题的处理。 #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from

Conversation

JKTerrific
Copy link
@JKTerrific JKTerrific commented Jun 4, 2018

1.修复了swagger无法读取到参数名称的问题
2.修复了swagger无法读取到ApiImplicitParams的问题
3.增加了ApiImplicitParams和参数列表冲突时的处理规则:同名覆盖,否则新增
4.修复了dubbo服务无法被调用,抛出wrong number of arguments的错误 #15
5.修复了在使用testng做单元测试时,引入swagger-dubbo存在注入异常的问题
6.修改了传参的具体规则。将简单类型参数和复杂对象均以url参数的形式进行传递。
7.修复了传入参数为对象时无法展示model的问题
8.增加了readme中的使用说明

2.修复了swagger无法读取到ApiImplicitParams的问题
3.增加了ApiImplicitParams和参数列表冲突时的处理规则:同名覆盖,否则新增
4.修复了dubbo服务无法被调用,抛出wrong number of arguments的错误
5.修复了在使用testng做单元测试时,引入swagger-dubbo存在注入异常的问题
6.修改了传参的具体规则。将简单类型参数和复杂对象均以url参数的形式进行传递。
7.修复了传入参数为对象时无法展示model的问题
8.增加了readme中的使用说明
@JKTerrific
Copy link
Author

同时在本次修改中,也思考了一些问题。
1:dubbo服务的表现形式和传统web服务的接口存在着一些差异。通常web接口如果需要传入复杂参数,一般做法是封装为一个入参VO进行传递。但是在DUBBO中,接口参数数量不一而且可能存在多个复杂对象,所以单纯以web接口的规范去套用dubbo服务接口显然是不严谨的。
2:本项目的接口调用目前还是以url参数作为数据调用来传递。主流服务器对http的header做出了限制。若存在大量复杂对象,可能会出现参数超过最大长度的限制,带来问题。
3:接口文档中,如果使用到了泛型,则一律会被Object类型取代,这是由Java的泛型擦除机制决定的,在运行时,一定不能获取到泛型的实际类型。然而springfox解决了这个问题。我猜测应该是和spring有关,在启动时获取了相关的信息,由此来作为文档的依据。

###################
希望能在后续的维护中共同解决上述的问题。感谢

@Sayi
Copy link
Owner
Sayi commented Jun 4, 2018

很棒,我稍晚些时候做一次合并。

你说的第一个问题我是赞同的。

接口并不适合提供rest服务,不管是dubbo或者dubbox提供的rest服务,都不建议使用。在我司内部,这种应用场景是在开发自测、快速调试接口、验证dubbo接口返回值、测试人员测试dubbo接口等内部使用场景,不会在线上使用。

后面两个问题需要去解决,感谢交流沟通。

@Sayi
Copy link
Owner
Sayi commented Jun 5, 2018

@JKTerrific 修复的第一个问题还有待考量,目前来看我这边无法重现你的问题。

原则上通过字节码操作,不需要指定编译参数的。

@@ -18,7 +19,7 @@
import io.swagger.models.Swagger;

@Component
public class DubboPropertyConfig implements SwaggerConfig {
public class DubboPropertyConfig implements SwaggerConfig, ServletContextAware {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为什么需要实现这个接口?ServletContext是可以直接注入的

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

因为当我在继承自AbstractTestNGSpringContextTests的testng测试用例中使用到它时,无法直接注入servletcontext,需要使用这种方法来完成注入。而这种方法可以兼容之前的用法并且解决这个问题。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry.刚才检查了一下发现这个文件的修改存在一些问题。由于我的疏忽,private ServletContext servletContext;上的注解应该被去除。但是我提交的版本中并没有去除他。这是一个错误。

@Sayi Sayi self-requested a review June 5, 2018 09:46
@JKTerrific
Copy link
Author

不知道为何,通过字节码的形式获取参数我本地任然无法获取到。或许您可以在一些关键的地方打上调试日志,我可以在运行时获取到这些日志并发送给您以方便定位这个奇怪的问题。
还有,一些文档中提到,如果需要使用字节码来获取参数名称,需要在编译参数增加-g,不知道这个因素是否会有影响。

@Sayi
Copy link
Owner
Sayi commented Jun 6, 2018

我在master新增了一些单元测试,所有单元测试必须通过,你可以试试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
0