前言

又是个网上搜索无果的问题,使用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"
}

swagger 参数驼峰失效问题,Lombok_lombok

问题

对比上述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 参数驼峰失效问题,Lombok_set方法_02


swagger显示为​​msrp​

原因

Java 属性无驼峰时会映射为首字母小写其余大写情况

修改

遵循阿里规范,命名全小写或者驼峰