坑:实体类大写前台请求到的json却变成了小写

这是一个关于实体类的cId,到了前台却变成了cid的问题

问题再现

今天写项目的途中发现了一个问题:

@Data
@TableName("tb_book")
@ApiModel("图书")
public class Book implements Serializable {

        @TableId(value = "id", type = IdType.AUTO)
        @ApiModelProperty("图书id")
        private Long id;
        
        @ApiModelProperty("图书名")
        private String title;
        
        @ApiModelProperty("简介")
        private String info;
        
        @ApiModelProperty("类别Id")
        private Long cId;

}

这是我的实体类,然后我在postman请求获取图书列表的时候出现了这种情况:


问题

细心的小伙伴可以看出来,我的“类别Id”这一项应该是cId,但是我请求到的是cid,I从大写变成了小写

尝试解决

然后我尝试手写GetSet方法

@Data
@TableName("tb_book")
@ApiModel("图书")
public class Book implements Serializable {

        @TableId(value = "id", type = IdType.AUTO)
        @ApiModelProperty("图书id")
        private Long id;
        
        @ApiModelProperty("图书名")
        private String title;
        
        @ApiModelProperty("简介")
        private String info;
        
        @ApiModelProperty("类别Id")
        private Long cId;

        public Long getId() {
                return id;
        }

        public void setId(Long id) {
                this.id = id;
        }

        public String getTitle() {
                return title;
        }

        public void setTitle(String title) {
                this.title = title;
        }

        public String getInfo() {
                return info;
        }

        public void setInfo(String info) {
                this.info = info;
        }

        public Long getcId() {
                return cId;
        }

        public void setcId(Long cId) {
                this.cId = cId;
        }
}

然后就好了


原因

经过查资料发现,SpringMVC默认使用jackson解析json,jackson又依赖于实体类的get/set方法,通过lombok生成的方法是



而手写的是



两个方法名不一样,所以出现了json解析出i变小写的问题

事后尝试

在找到问题所在之后,我又进行了尝试,给实体类中cId这个字段起了个别名

@ApiModelProperty("类别Id")
@JsonProperty("cId")
private Long cId;

发现,使用lombok,最后postman里面请求的是cId正常了

总结

这次的问题可能是因为lombok的生成规则和idea的快捷键生成的get/set方法不太一样

解决办法

1.手写get/set方法
2.使用别名@JsonProperty("cId")
3.使用lombok时,避免一个小写字母接一个大写字母这种实体类

查其他资料发现的问题

像NICKName这种不符合驼峰命名的名字,最后会变成nickname

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容