一個Spring Controller中的方法,使用@RequestBody獲取參數(shù),參數(shù)原型如下:
@Data
public class ProductLineDto {
@NotBlank
@ApiModelProperty(required = true)
private final String productLineId;
@NotBlank
@ApiModelProperty(required = true)
private final String productLineName;
private final String productLineDescription;
}
后來需要增加一個參數(shù),增加后函數(shù)原型如下:
@Data
public class ProductLineDto {
@NotBlank
@ApiModelProperty(required = true)
private final String productLineId;
@NotBlank
@ApiModelProperty(required = true)
private final String productLineName;
private final String productLineDescription;
private List<String> projectNames;
}
增加projectNames參數(shù)后后,projectNames始終不能獲取前臺傳來的數(shù)據(jù)。因為項目中使用fastJson作為HttpMessageConverters, 所以從fastJson的代碼入手查找問題。
Debug了一下fastJson的代碼,發(fā)現(xiàn)fastJson先獲取dto的構(gòu)造函數(shù),然后通過構(gòu)造函數(shù)注入屬性。debug時發(fā)現(xiàn)fastJson獲取的構(gòu)造函數(shù)只有三個參數(shù),缺少了新加入的projectNames。
Lombok的代碼我沒有分析,但回過頭來看下ProductLineDto的代碼,發(fā)現(xiàn)原始屬性都有final關(guān)鍵字,所以肯定需要構(gòu)造函數(shù)來初始化成員變量,猜測lombok生成構(gòu)造函數(shù)參數(shù)的時候,只選擇了final變量,所以導(dǎo)致非final變量沒有值。
將projectNames加上final修飾,問題解決。