@JsonCreator使用-Jackson 反序列化時 json 字符串 和 Java Bean 對象類型不一致

待反序列化 json 字符串

{
    "valuationMethods": {
        "valuationMethod": [
            {
                "methodId": 1,
                "methodName": "比較法",
                "assetTypeCode": "M010001",
                "recommendPriority": 0
            },
            {
                "methodId": 2,
                "methodName": "參照法",
                "assetTypeCode": "M010002",
                "recommendPriority": 1
            }
        ]
    },
    "assetCode": "粵國用2020第00001號",
    "city": "深圳",
    "assetPackageName": "A戶資產包",
    "adjustOfSpecialUse": 0.00512
}

 

預期結果

{
    "valuationMethods": [
        {
            "assetTypeCode": "M010001",
            "methodId": 1,
            "methodName": "比較法",
            "recommendPriority": 0,
            "canValuation": null
        },
        {
            "assetTypeCode": "M010002",
            "methodId": 2,
            "methodName": "參照法",
            "recommendPriority": 1,
            "canValuation": null
        }
    ],
    "assetCode": "粵國用2020第00001號",
    "city": "深圳",
    "assetPackageName": "A戶資產包",
    "adjustOfSpecialUse": 0.00512
}

 

方式1

@Data
public class AssetDTO {
    private String assetCode;
    private String city;
    private String assetPackageName;
    private List<AssetTypeMethod> valuationMethods;
    private BigDecimal adjustOfSpecialUse;

    public void setValuationMethods(final Map<String, List<AssetTypeMethod>> valuationMethods) {
        this.valuationMethods = valuationMethods.get("valuationMethod");
    }
}

 

方式2

@Data
public class AssetDTO {
    // @JsonProperty("valuationMethods") 可省
    @JsonCreator
    public AssetDTO(@JsonProperty("valuationMethods")final Map<String, List<AssetTypeMethod>> valuationMethods) {
        this.valuationMethods = valuationMethods.get("valuationMethod");
    }

    private String assetCode;
    private String city;
    private String assetPackageName;
    private List<AssetTypeMethod> valuationMethods;
    private BigDecimal adjustOfSpecialUse;
}

@JsonCreator作用: 指定反序列化時@JsonCreator註解的構造函數被會調用。如果沒有這個註解,則默認會調用無參的構造函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章