今天在用RequestBody接收参数时,2个字段一直为null,接收不到,开头以为是字段的问题,因为这2个字段都是对象,后来经过原文章,才发现是命名的问题。
原来的DTO对象:
@Data
public class VVotePrizeAddDTO implements Serializable {
private Long voteId;
/**
* 是否设置奖品 0否1是
*/
private Boolean usePrize;
/**
* 奖品说明
*/
private String prizeIntroduce;
// 奖项列表
private List<VPrizeAddDTO> vPrizeAddDTOList;
}
传参:
{
"voteId":2,
"usePrize":1,
"prizeIntroduce":"ssdsd",
"vPrizeAddDTOList":
[
{
"productId":1,
"prizeLevel":1,
"consumeNum":10
},
{
"productId":2,
"prizeLevel":2,
"consumeNum":10
}
]
}
最后的奖项列表字段一直无法传参,看了大神的文章后才知道是驼峰命名的问题,使用RequestBody传参时,如果一个字段第一个时小写,第二个是大写,那么就会导致接收不到。
有2种解决方式:
方法一:修改字段命名,将vPrizeAddDTOList改成vvPrizeAddDTOList。
方法二:加上@JsonProperty注解,指定某个方法JSON转换时的名字,上述实体类将修改为:
@Data
public class VVotePrizeAddDTO implements Serializable {
private Long voteId;
/**
* 是否设置奖品 0否1是
*/
private Boolean usePrize;
/**
* 奖品说明
*/
private String prizeIntroduce;
// 奖项列表
private List<VPrizeAddDTO> vPrizeAddDTOList;
@JsonProperty(value = "vPrizeAddDTOList")
private List<VPrizeAddDTO> getvPrizeAddDTOList() {
return vPrizeAddDTOList;
}
@JsonProperty(value = "vPrizeAddDTOList")
private void setvPrizeAddDTOList(List<VPrizeAddDTO> vPrizeAddDTOList) {
this.vPrizeAddDTOList = vPrizeAddDTOList;
}
}