一、问题
-
以单字母开头的属性作为接口入参时,在文档中变成两个“相似”的属性;
-
作为响应实体时,大小写不敏感。
查资料发现问题是普遍存在的,接口入参定义:
@ApiModel("测试")
data class TestSwaggerParam(
@ApiModelProperty(value = "云编号")
val vCid:String
)
swagger显示:
// requestBody
{
"vCid": "",
"vcid": ""
}
// responseBody
{
"vcid": ""
}
二、原因
类属性get set的时候属性名都会转为大写。如果你的属性是大写的,它的set get 方法也是setA.. getB.. ,程序会自动默认你传过来的属性是小写的name;
spring默认的命名方式,首字母转小写,连续大写字母都转成小写。
对于本文中的情况来说:
-
vCid的getter方法为getVCid
-
连续大小写字母转为小写后,swagger无法辨别实际参数名字是vcid还是vCid
-
最终入参为了容错(猜测)提供两个属性,而响应结果大小写不敏感并不会严重影响实际使用
三、解决
规范属性命名,放弃简称,将单字母补全。
应该还有其他的解决方法让swagger能够在这种特殊情况下正确识别实际的属性,欢迎补充。
引用: