在Jackson中反序列化具有相同名称但不同类型的属性?

在Jackson中反序列化具有相同名称但不同类型的属性?,第1张

在Jackson中反序列化具有相同名称但不同类型的属性

我可以建议您像这样使用JsonNode:

class Event {    @JsonProperty("channel")    private JsonNode channelInternal;    private Channel channel;    private String channelStr;        public Channel getChannel() {        if (channel == null && channelInternal != null) { if (channelInternal.isObject()) {     int id = channelInternal.get("id").intValue();     String name = channelInternal.get("name").asText();     channel = new Channel(id, name); }        }        return channel;    }        public String getChannelStr() {        if (channelStr == null && channelInternal != null) { if (channelInternal.isTextual()) {     channelStr = channelInternal.asText(); }        }        return channelStr;    }}

或像这样

class Event {    private Channel channel;    private String channelStr;    @JsonSetter("channel")    public void setChannelInternal(JsonNode channelInternal) {        if (channelInternal != null) { if (channelInternal.isTextual()) {     channelStr = channelInternal.asText(); } else if (channelInternal.isObject()) {     int id = channelInternal.get("id").intValue();     String name = channelInternal.get("name").asText();     channel = new Channel(id, name); }        }    }    public Channel getChannel() {        return channel;    }    public String getChannelStr() {        return channelStr;    }}

但是我认为使用自定义解串器更为常见。

这是测试代码

public static void main(String[] args) throws IOException {    ObjectMapper objectMapper = new ObjectMapper();    String source1 = "{n" + "    "channel" : "JHBHS"n" + "}";    String source2 = "{n" + "    "channel": {n" + "         "id": 12321,n" + "         "name": "Some channel"n" + "    }n" + "}";    //Test object parsing    Event result = objectMapper.readValue(source2, Event.class);    System.out.println(String.format("%s : %s", result.getChannel().getId(), result.getChannel().getName()));    //Test string parsing    result = objectMapper.readValue(source1, Event.class);    System.out.println(result.getChannelStr());}

输出

12321 : Some channelJHBHS


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5501732.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-13
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存