Spring RequestBody 接收请求参数值是空,警惕大小写命名

写在前面

上午碰到一个问题。使用 @RequestBody 接收 json 字符串参数,controller接收到的参数一直为空。但是自己写的例子就没问题。最后相互对比是接收参数的对象有问题,却一直找不到原因。

找错

public class QueryStationReq {

    private String LastQueryTime;
    private int PageNo ;
    private int PageSize  ;

    public String getLastQueryTime() {
        return LastQueryTime;
    }

    public void setLastQueryTime(String lastQueryTime) {
        LastQueryTime = lastQueryTime;
    }

    public int getPageNo() {
        return PageNo;
    }

    public void setPageNo(int pageNo) {
        PageNo = pageNo;
    }

    public int getPageSize() {
        return PageSize;
    }

    public void setPageSize(int pageSize) {
        PageSize = pageSize;
    }
}
public class User {

    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

这是两个接收参数的对象,怎么也比较不出有什么区别,但是错绝对是这两个对象的原因。

区别在于 命名规则,对 你没看错 ,就是这个原因。

后面突然想起这事 Spring 的注入规则。说简单点大家发现没,其实不管我们的属性首字母是大写还是小写,比如 name 或者 Name。它的 set 方法都是一样的。所以当使用 大写的属性时,Spring 无法判断这个属性到底是小写还是大写,这就无法注入赋值了。

这 艹 甲方,装 X 写的破文档,一点代码规范都没,听蛋疼的。

解决办法很简单,其实和处理 mapper 映射一样。见下

    @JsonProperty(value = "LastQueryTime")
    private String lastQueryTime;

 

怎么说呢?不管有用没,还是想加上这句
老郭种树原创,转载请加上Spring RequestBody 接收请求参数值是空,警惕大小写命名
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注