将 JSON 转换为具有计算字段的 Java 对象



我有这个JSON对象:

[
    {
      "field1": "xxxxx",
      "field2": "vvvvvv",
      "field3": "cccccc",
      "field4": "zzzzzzz"
    },
    {
      "field1": "aaaaa",
      "field2": "ssssss",
      "field3": "dddddd",
      "field4": "ffffff"
    }
]

我正在使用FasterXML的杰克逊库将此JSON反序列化为我的类Foo。这个有这样的结构:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
    private String id;
    @JsonProperty("field1")
    private String customField1;
    @JsonProperty("field2")
    private String customField2;
    @JsonProperty("field3")
    private String customField3;
    @JsonProperty("field4")
    private String customField4;
    ................
 }

我想在反序列化时计算字段id的值。此值是将customField4customField3 连接的结果。是否可以执行此类操作,还是需要将此值传递到我的 JSON 中?

好的伙计们,解决方案是设置自定义

@JsonDeserialize(using = EntityJsonDeserializerCustom.class)

通过这种方式,我创建了一个通用静态类,其中只有 json 返回的字段,然后我覆盖反序列化方法以返回带有计算字段的对象

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonDeserialize(using = EntityJsonDeserializerCustom.class)
public class Foo {

    private String id;
    @JsonProperty("field1")
    private String customField1;
    @JsonProperty("field2")
    private String customField2;
    @JsonProperty("field3")
    private String customField3;
    @JsonProperty("field4")
    private String customField4;
    ................
 }

public class EntityJsonDeserializerCustom extends JsonDeserializer<Foo> {
    @Override
    public Foo deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        InnerFoo innerFoo = jp.readValueAs(InnerFoo.class);
        Foo foo = new Foo();
        foo.setField1(innerFoo.field1);
        foo.setField2(innerFoo.field2);
        foo.setField3(innerFoo.field3);
        foo.setField4(innerFoo.field4);
        foo.setId(innerFoo.field4 + innerFoo.field3);

        return foo;
    }
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class InnerFoo {
        @JsonProperty("field1")
        private String customField1;
        @JsonProperty("field2")
        private String customField2;
        @JsonProperty("field3")
        private String customField3;
        @JsonProperty("field3")
        private String customField4;
    }
}
通过这种方式,我

解决了我的问题,我希望这对社区:D有所帮助

相关内容

  • 没有找到相关文章

最新更新