gpt4 book ai didi

java - FasterXML Jackson 的 JSON 多态性与 JsonSubTypes 和 JsonTypeInfo

转载 作者:行者123 更新时间:2023-12-01 11:38:59 26 4
gpt4 key购买 nike

对于 FasterXML 的 Jackon JSON 开发人员来说,这是一个常见问题。当我使用类似的 POJO 时,我遇到过这个问题:

package net.package.dogs.retrievers

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "family")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = LabradorRetriever.class),
@JsonSubTypes.Type(value = GoldenRetriever.class)
})
public abstract class Retriever {
private String name;
private Color color;

public Retriever() {}

public Retriever(String name, Color color) {
this.name = name;
this.color = color;
}

public String bark() {
return "You can't hear me but I'm barking";
}
}
package net.package.dogs.retrievers

public class LabradorRetriever extends Retriever {
public LabradorRetriever() {
super();
}

public LabradorRetriever(String name, Color color) {
super(name, color);
}

public String bark() {
return "Ruff! Ruff!";
}

public String fetchDucks() {
return "ufff...";
}
}
package net.package.dogs.retrievers

public class GoldenRetriever extends Retriever {

public GoldenRetriever() {
super();
}

public GoldenRetriever(String name, Color color) {
super(name, color);
}

public String bark() {
return "Wruuff! Wruff!";
}
}
public enum Color {
YELLOW,
CHOCOLATE,
BLACK
}

此类与以下 JSON 消息匹配...

{
"family" : "net.package.dogs.retrievers.GoldenRetriever",
"name" : "Goldie",
"color" : "YELLOW"
}
{
"family" : "net.package.dogs.retrievers.LabradorRetriever",
"name" : "Cookie",
"color" : "CHOCOLATE"
}

但相反,我想要有一个不同的“种族”,如下所示。

{
"family" : "GOLDEN_RETRIEVER",
"name" : "Goldie",
"color" : "YELLOW"
}
{
"family" : "LABRADOR_RETRIEVER",
"name" : "Cookie",
"color" : "CHOCOLATE"
}

我应该如何填写 JsonTypeInfoJsonSubTypes 以匹配之前的 JSON 消息?

最佳答案

这是实现此目的的一种方法:

  1. @JsonTypeInfo 更改为使用 JsonTypeInfo.Id.NAME:

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, ...
  2. 添加@JsonTypeName进行名称解析:

    @JsonTypeName("LABRADOR_RETRIEVER")
    public class LabradorRetriever extends Retriever {

关于java - FasterXML Jackson 的 JSON 多态性与 JsonSubTypes 和 JsonTypeInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707933/

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