一个简单的Swagger前前后后遇到了N多问题。
最近又遇到2个。
第1个:Swagger2异常:java.lang.NumberFormatException:For input string:""
参考网上答案,解决了,原样照搬的。
https://fansunion.blog.csdn.net/article/details/100131321
第2个:
Swagger,
参数明明配置的是Long类型,
界面显示成Integer。
@ApiImplicitParam(required = true, name = "referralId", value = "内推人的ID", dataType = "long"),
参考了网上dataType的描述和源码中的描述,“
The data type of the parameter.
This can be the class name or a primitive.
”
但是界面如图:
经过种种尝试,确认自己写法没错,确认程序没大问题。
想到,可能需要用“原生”的,看看效果。
项目中用了第三方UI swagger-bootstrap-ui。
想到会不会是 别人的bug,就像第1个问题 属于 官方的bug一样。
不能总怀疑自己,还得大胆怀疑别人。是人,就会有bug的。
原生界面,效果就很明显了。
integer和long,类型都显示为 integer。
但是,有个括号 int32和int64。
猜测,后端integer和long对前端来说,都是一样的 整型,位数不同。
long属于Java中的叫法,swager为了通熟易懂,用编程里面最基础的 int,int32和int64来解释吧。
最后一个奇怪的问题:
@ApiImplicitParam(required = true, name = "referralId", value = "内推人的ID", dataType = "Long"),
@ApiImplicitParam(required = true, name = "channelId", value = "简历来源渠道id(1,拉钩;2,BOSS;3,智联;4,前途无忧;5,内推;6,Offer审批", dataType = "Integer")
dataType = "Integer",界面显示类型为“ref”引用类型,似乎判断有问题额。
用“int”就没问题。
那为啥用“Long”就能正确显示为integer,int64呢?
好奇怪啊。
难道是源代码中那个特殊判断,如果是Long,返回Integer
“
f(BaseIntegerProperty.TYPE.equals(type)){
return Long.valueOf(example);
}
就是说如果实体属性类型是Integer,就把example转为Long类型,而example默认为"",导致转换错误。
”
感觉没关系。没有对Long进行特殊判断。
先这样,用原生类型 int,long吧。
日拱一卒,先解决技术问题,再解决商业问题。
就是干。