簡體   English   中英

傑克遜在反序列化中忽略了JsonProperty注釋

[英]Jackson ignores JsonProperty annotation in deserialization

我有一個難題。 我正在嘗試使用構建器模式將json消息反序列化為pojo,並且出現以下錯誤:

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Information" 
(class com.verification.client.models.response.Response$Builder), not marked as ignorable (3 known properties: "status", "products", "information"])

這讓我感到非常困惑,因為我已經使用JsonProperty注釋在pojo中清楚地標記了該字段:

@JsonDeserialize(builder = Response.Builder.class)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Response {
    @JsonProperty("Status")
    private final Optional<Status> status;
    @JsonProperty("Products")
    private final Optional<List<ResponseProduct>> products;
    @JsonProperty("Information")  //Here's where the field is defined
    private final Optional<List<ResponseInformation>> information;

    private Response(final Builder b){
        this.status = b.status;
        this.products = b.products;
        this.information = b.information;
    }

    public Optional<Status> getStatus() {
        return status;
    }

    public Optional<List<ResponseProduct>> getProducts() {
        return products;
    }

    public Optional<List<ResponseInformation>> getInformation() {
        return information;
    }

    @JsonPOJOBuilder(buildMethodName = "build", withPrefix = "")
    public static class Builder{
        private Optional<Status> status;
        private Optional<List<ResponseProduct>> products = Optional.empty();
        private Optional<List<ResponseInformation>> information = Optional.empty();

        public Builder(){}

        public Builder status(final Status status){
            this.status = Optional.of(status);
            return this;
        }

        public Builder products(final List<ResponseProduct> products){
            this.products = Optional.of(products);
            return this;
        }

        public Builder information(final List<ResponseInformation> information){
            this.information = Optional.of(information);
            return this;
        }

        public Response build(){
            return new Response(this);
        }
    }
}

我覺得這有點小,但是在這一點上,我對為什么我的代碼采用這種方式感到困惑。

PS這是我正在反序列化的json

{
"Information": [{
    "InformationType": "error-details",
    "Code": "internal_application_error",
    "Description": "Error: Internal",
    "DetailDescription": []
}]
}

不久前解決了這個問題,為后代作了解答。

我遇到的問題是構建方法未正確解釋,但是通過在靜態構建類的方法上定義@JsonSetter批注,Jackson能夠正確解釋輸入並構建對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM