有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Jackson将Json字符串数组反序列化为不同的类型

我正在以这种格式反序列化一些JSON:

"devices": [
  {
    "device": "1",
    "type": "phone",
    "number": "XXX-XXX-0100",
    "name": "",
    "capabilities": [
        "push",
        "sms",
        "phone"
        "mobile_otp"
    ]
  },
  {
    "device": "2",
    "type": "token",
    "name": "0"
  }
]

我想把“能力”分为不同的对象类型。例如:推送、短信、手机、MobileOpt。我用Jackson来反序列化这个,下面是我的想法,它是有效的。然而,我想找到一种方法来设置它,不需要每次添加新的子类型时都编辑父功能类。有没有一种方法可以做到这一点,但仍然让Jackson正确解析JSON?我尝试过使用模板方法或类似的方法来使用,但Jackson解析器似乎不起作用。有什么想法吗

public abstract class Capability {
    public static final Map<String, Capability> factoryMap = new HashMap<String, Capability>();

    static {
        factoryMap.put("mobile_otp", new Passcode());
        factoryMap.put("phone", new Phone());
        factoryMap.put("push", new Push());
        factoryMap.put("sms", new Sms());
    }

    @JsonCreator
    public static Capability forValue(String value) {
        return factoryMap.get(Strings.nullToEmpty(value).toLowerCase());
    }
}

public class MobileOtp extends Capability {}
public class Phone extends Capability {}
public class Push extends Capability {}
public class Sms extends Capability {}


public class Device { 
    @JsonProperty("capabilities")
    private Collection<Capability> capabilities = new ArrayList<Capability>();

    // other stuff...
}

共 (0) 个答案