gpt4 book ai didi

java - Jackson动态Pojo反序列化

转载 作者:行者123 更新时间:2023-11-30 06:40:06 29 4
gpt4 key购买 nike

拥有像下一个这样的动态 POJO:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyDynamicWrapper <T> {

@JsonProperty("header")
private CommonHeader header;

@JsonProperty("payload")
private T payload;

public MyDynamicWrapper(CommonHeader header, T payload) {
super();
this.header = header;
this.payload = payload;
}

public CommonHeader getHeader() {
return header;
}

public void setHeader(CommonHeader header) {
this.header = header;
}

public T getPayload() {
return payload;
}

public void setPayload(T payload) {
this.payload = payload;
}
}

其中 T 有效负载可以是以下之一:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyPayloadOne {

@JsonProperty("status")
private int status;

@JsonProperty("action")
private String action;

...
}

@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyPayloadTwo {

@JsonProperty("properties")
private List<String> properties = new ArrayList<>();

...
}

使用 Jackson 反序列化此动态信息的最佳方式是什么?是否必须实现反序列化器?我当前的配置不是动态的,我正在使用:

MyDynamicWrapper pojo = jacksonMapper.readValue(jsonMessage, MyDynamicWrapper.class);

我认为这很明显,但我不知道如何指示对 jackson 的动态引用。

更新

除了接受的答案之外,我还检查了是否可以像这样定义 jackson 映射器:

MyDynamicWrapper<?> pojo = jacksonMapper.readValue(jsonMessage, MyDynamicWrapper.class);

这会将 POJO 转换为两者有效负载。

最佳答案

您可以(并且应该)通过 TypeReferencereadValue 来指定要反序列化的泛型类实例的类型。例如。包装 MyPayloadOne 时:

TypeReference ref = new TypeReference<MyDynamicWrapper<MyPayloadOne>>(){};
MyDynamicWrapper<MyPayloadOne> pojo = jacksonMapper.readValue(jsonMessage, ref);

关于java - Jackson动态Pojo<T>反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44503969/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com