@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注解的构造函数被会调用。如果没有这个注解,则默认会调用无参的构造函数

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