SpringBoot @RequestBody部分参数为空

前言

最近项目上遇到一个奇怪的问题,就是我传的json参数,而且用了Valid注解来校验参数,我确定这个参数传了,但是总是报这个参数不能为空,下面记录下解决方式

问题

下面是我的实体类里的两个字段,其他字段都没问题,都有值,唯独这俩字段没有值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* x轴坐标
*/
@ApiModelProperty(value="x轴坐标", required = true)
@Excel( name = "x轴坐标", width = 15 )
@NotBlank(message = "x轴坐标不能为空")
private String xCoordinate;

/**
* y轴坐标
*/
@ApiModelProperty(value="y轴坐标", required = true)
@Excel( name = "y轴坐标", width = 15 )
@NotBlank(message = "y轴坐标不能为空")
private String yCoordinate;

所以我第一想到的是不是json转bean的问题,这样的参数命名是不是又问题,我把C改成小写,发现没有问题,多次测试后发现,如果参数第一个字母为小写,第二个字母为大写,就不能正常的从JSON中解析出来,如:xCoordinate,aLame,bId等参数都不能被正常的解析,而mySelf,poType等最前面不止一个字母小写的情况是可以用的

解决方案
  • 方案一:改名字,第二个大写的改成小写或者改成其他名字(如果引用较多,改动较大,影响比较大)

  • 方案二:加上@JsonProperty注解,指定某个方法JSON转换时的名字,上述实体类将修改为

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     /**
    * x轴坐标
    */
    @ApiModelProperty(value="x轴坐标", required = true)
    @Excel( name = "x轴坐标", width = 15 )
    @JsonProperty(value = "xCoordinate")
    @NotBlank(message = "x轴坐标不能为空")
    private String xCoordinate;

    /**
    * y轴坐标
    */
    @ApiModelProperty(value="y轴坐标", required = true)
    @Excel( name = "y轴坐标", width = 15 )
    @JsonProperty(value = "yCoordinate")
    @NotBlank(message = "y轴坐标不能为空")
    private String yCoordinate;

    多加了这个注解@JsonProperty(value = "yCoordinate"),问题解决