Unable to interpret the implicit parameter configuration with dataType: String, dataTypeClass: class

一、问题发现

一个新的项目在本地启动的时候,控制台有很多这样的提示信息:
在这里插入图片描述
虽然不影响系统正常运行,但作为一个有代码洁癖的人自然忍不了这样的警示信息,这个是swagger包下的日志信息,其中有一个ApiImplicitParams注解。

二、问题解决

在所有使用这个注解的地方,增加一个属性dataTypeClass = String.class
比如: @ApiImplicitParam(name = "page", value = "页码") 改为@ApiImplicitParam(name = "page", value = "页码", dataTypeClass = String.class),都加完之后,这样的提示信息就不没有了。

三、问题探究

说完了解决方案,那来说一下为啥增加了dataTypeClass = String.class就可以解决这个问题了。
首先我们先看下这个字段dataTypeClass的定义:
在这里插入图片描述
dataTypeClass的默认值是Void.class ,这个字段的上面有行注释:Overrides dataType if provided.翻译成中文的意思就是:如果提供(自定义)了 dataTypeClass字段的值,就会覆盖掉提供的dataType的值,初次只看这句注释并不太懂是什么意思,直到我回到控制台打印的日志的信息,找到这行日志是在OperationImplicitParameterReader类中打印出来的,进入到这个类中,搜索关键的日志信息并看到对应的代码才明白这句话的意思,搜索日志中的这句话:
Unable to interpret the implicit parameter configuration with dataType
在这里插入图片描述
在这个方法中的164行到168行之间很明显可以看出问题,当param.dataTypeClass() == Void.class则执行Class.forName(param.dataType());对参数属性中的dataType的类进行加载,当ApiImplicitParam注解中也没有dataType字段值的时候,加载的时候就会出现ClassNotFoundException的异常信息,然后就会报这个警告提示。
当我们把dataTypeClass的值从默认的Void.class改为非Void.class的,那就会走第一个if块,加载的类就是我们自定义的class了:
比如:@ApiImplicitParam(name = "page", value = "页码", dataTypeClass = String.class)中的String.class
至于什么时候会加载ApiImplicitParam这个注解,就需要自己去探寻了,我这里定位到了这个方法,OperationImplicitParameterReader.readParameters中的context.findAnnotation(ApiImplicitParam.class);这行代码。
在这里插入图片描述
剩下的如果感兴趣可以自行去发现宝藏哦~

---------知道的越多,不知道的越多---------------

猜你喜欢

转载自blog.csdn.net/fhf2424045058/article/details/130578658