【问题标题】:Unable to deserialize using Jackson with Immutables: unrecog [duplicate]无法将 Jackson 与 Immutables 一起使用反序列化:unrecog [重复]
【发布时间】:2020-06-29 21:03:48
【问题描述】:

我有一个格式如下的 JSON:

{
    "FileStatuses": {
        "FileStatus": [{
                "accessTime": 1479784299020,
                "type": "FILE"
            },
            {
                "accessTime": 1475421868510,
                "type": "FILE"
            }
        ]
    }
}

我正在尝试使用以下类对其进行反序列化:

@Value.Immutable
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(as = ImmutableFileListResponse.class)
@JsonDeserialize(as = ImmutableFileListResponse.class)
public interface FileListResponse {

    @JsonProperty("FileStatuses")
    JSONObject fileStatuses();
}

但它会引发以下错误:unrecognized field "FileStatus", not marked as ignorable (0 known properties )

但如果我将 Json 读取为字符串,然后使用JSONObject obj = new JSONObject(source);,它会完美运行。

我哪里错了?

【问题讨论】:

    标签: java serialization jackson immutables-library


    【解决方案1】:

    我使用以下 2 个类让它工作:

    @Value.Immutable
    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonSerialize(as = ImmutableFileListResponse.class)
    @JsonDeserialize(as = ImmutableFileListResponse.class)
    public interface FileListResponse {
    
        @JsonProperty("FileStatuses")
        FileListInnerResponse fileStatuses();
    
        @Value.Immutable
        @JsonIgnoreProperties(ignoreUnknown = true)
        @JsonSerialize(as = ImmutableFileListInnerResponse.class)
        @JsonDeserialize(as = ImmutableFileListInnerResponse.class)
        interface FileListInnerResponse {
    
            @JsonProperty("FileStatus")
            List<FileData> fileStatus();
        }
    }
    

    和 FileData.java:

    @Value.Immutable
    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonSerialize(as = ImmutableFileData.class)
    @JsonDeserialize(as = ImmutableFileData.class)
    public interface FileData {
    
        @JsonProperty("accessTime")
        long accessTime();
    
        @JsonProperty("type")
        String type();
    }
    

    如果有比使用内部类或 3 个不同的类更好的方法,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2013-01-08
      • 2017-09-05
      • 1970-01-01
      • 2015-10-02
      • 2017-12-01
      • 2020-08-15
      相关资源
      最近更新 更多