spring @RequestBody注解使用lombok+fastJson參數(shù)不能轉(zhuǎn)換的問題

一個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修飾,問題解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容