传参请求时jackson大小写取值异常和序列化多出一个属性的问题学习记录

本文记录了在使用Jackson进行参数请求时遇到的大写属性取值异常和序列化出现多余属性的问题。问题源于Jackson识别字段和方法时的规则,解决方案是使用@JsonProperty指定JSON名称。在序列化过程中,由于属性和getter/setter的识别规则,可能导致属性重复。IDE如IDEA在生成get/set方法时,会避免此类问题,但手动编写时需要注意首字母大小写的规范,以防止序列化歧义。

在开发业务中有一个请求接受实体大致如下:

@Data
public class ActivityAddQuery {
   
   
    /**
     * a类标签
     */
    @NotBlank(message="a类标签不能为空")
    @Length(max=64,message = "")
    private String aLabel;
    }

在前端请求参数设置为{“aLabel”:“aaa”}时后端接受到的参数一直为空,查询资料发现,spring的jackson参数发现顺序,依次如下:
1.所有被public修饰的字段;
2.所有被public修饰的getter;
3.所有被public修饰的setter。
由于aLabel被设置成private,不符合第1条,到了第二条得到的是getALabel()方法,jackson不知道第一个A是大写还是小写,默认将从第一个大写开始的所有大写字母识别成小写,即alabel,读取setALabel()也一样。例如属性aLLbel也会由getALLabel()识别成allbel。
解决方案: 添加@JsonProperty(“aLabel”)指定json名称即可。

@Data
public class ActivityAddQuery {
   
   
    /**
     * a类标签
     */
    @JsonProperty("aLabel")
    private String aLabel;
    }

想要知道原因,首先查看编译之后的的class为

@Data
public class ActivityAddQuery {
   
   
    /**
     * a类标签
     */
    @JsonProperty("aLabel")
    private String aLabel;
   
	 public String getALabel() {
   
   
            return this.aLabel;
     }

     @JsonProperty
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值