解决属性命名不规范导致接收不到数据问题

Bug描述

使用postman进行接口测试的时候,发现接收参数有一个属性怎么也接收不到数据,其他的属性都可以正常接收。也仔细检查过名称是否一致等种种可能问题,还是不知道怎么回事。

Bug原因

项目中使用Lombok的@Date注解来自动生成get、set方法,如果这时有一些属性的命名不规范,可能导致生成的get、set方法名字有些特殊,这就是导致参数接收不到数据的原因。

例如:项目中"qChargeAmt"这个参数尽管已经符合驼峰命名法了,但仍然接收不到参数

//附加费
private BigDecimal qChargeAmt

//使用Lombok自动生成的get、set方法,接收不到数据
entry.setQchargeamt(BigDecimal qChargeAmt);
entry.getQchargeamt();

解决办法

  1. 检查传参的名字是否一致

  2. 接受不到数据的参数命名是否规范,如果不规范则进行修改

  3. 如果参数命名不规范,但是名字不能修改,还有两种方法可以解决:

    一是重写这个属性的get、set方法(重写的时候我是用idea自动生成的,虽然方法命名有些怪,但是可以接收到数据了);

    //重写get、set方法
    public BigDecimal getqChargeAmt() {
    		return qChargeAmt;
    }
    public void setqChargeAmt(BigDecimal qChargeAmt) {
    	this.qChargeAmt = qChargeAmt;
    }
    

    二是对属性重命名,并使用@JsonProperty@JsonField,在序列化或反序列化时对属性进行重命名。

    @JsonProperty(value = "qChargeAmt")
    @JsonField(name = "qChargeAmt")
    @TableField(value = "Q_CHARGE_AMT")	//项目中使用mybatis-plus,使用这个注解可以和数据库字段名对应起来
    private BigDecimal qchargeamt;
    

    @JsonProperty@JsonField的作用和区别可以自己搜索一下,使用第二种方法,在属性进行接收和发送的时候,仍是qChargeAmt。

参考:LOMBOK使用@DATA注解下的不标准驼峰导致参数获取不到的问题及解决

posted @ 2020-09-14 20:44  乐多i  阅读(571)  评论(0)    收藏  举报