在开发业务中有一个请求接受实体大致如下:
@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;
}