前言
又是个网上搜索无果的问题,使用swagger生成的参数驼峰失效 先看问题
java类
import lombok.Data;
import java.util.List;
/**
* @Author ZhangLe
* @Date 2020/11/24 15:30
*/
@Data
public class RequestCarManagerVo {
private String wId;
private Boolean isCarManager=false;
private List<String> dId;
}
swagger生成
{
"did": [
"string"
],
"isCarManager": true,
"wid": "string"
}
问题
对比上述java和swagger生成的对象,我们发现有几个字段自变了,wId
的dId
驼峰的命名均变成了小写,长字符串的名称为改变,传递参数还必须按照小写的传,不然后台接收不到。这是为什么?
原因
经过一番排查,比如迭代jar,换参数等操作,原因锁在了lombok
有的人会说,这玩意多好用啊,一个注解直接生成了所有需要的方法,我们先对比一下他两生成的getset方法
lombok
String getwId = requestCarManagerVo.getWId();
List<String> arr = requestCarManagerVo.getDId();
java
String getwId = requestCarManagerVo.getwId();
List<String> arr = requestCarManagerVo.getdId();
public String getwId() {
return wId;
}
public void setwId(String wId) {
this.wId = wId;
}
可有明显看到,原生java生成的getset方法,从命名上直接按照变量的大小写命名,而lombok选择将第一个字符大写,,也就是说因为getset方法的不同,导致生成的参数不同,为了验证我类中重写了object的方法重新生成swagger
{
"dId": [
"string"
],
"isCarManager": true,
"wId": "string"
}
果然问题得到了解决,建议大家阅读一下推荐的文章,发现这个问题也是忽然想起了几周前读过的这篇文章,这个文章详细说明了lombok所带的几个问题
推荐
给大家推荐看一篇文章,这边文章从其他几个方面阐释了问啥不用lombok
为什么有些公司不让用 Lombok ?
总结
个人认为可能是国内外开发团队命名习惯不同,参数改为全小写,这种两者生成的文档都一样,也不关乎swagger的事,如果你使用了这种参数形式,那必须重写原生java的getset,有时候图省事,或者代码优雅,为此会给自己挖个坑。
更新2022.03.16
昨天遇到一个问题,参数为无驼峰,相应为有驼峰,swagger为全小写
java
private Double MSRP;
public Double getMSRP() {
return MSRP;
}
public void setMSRP(Double MSRP) {
this.MSRP = MSRP;
}
前端显示为mSRP
swagger显示为msrp
原因
Java 属性无驼峰时会映射为首字母小写其余大写情况
修改
遵循阿里规范,命名全小写或者驼峰