繁体   English   中英

如何使用Jackson将Json String数组反序列化为单独的类型

[英]How to deserialize Json String array into separate types using Jackson

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

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

我想将“功能”放入单独的对象类型中。 例如:Push,Sms,Phone,MobileOtp。 我正在使用Jackson进行反序列化,下面是我想出的方法,它可以正常工作。 但是,我想找到一种设置方法,该方法无需每次添加新的子类型时都必须编辑父Capability类。 有办法做到这一点,但仍然让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...
}

除了指定简单的Map ,为什么不指定定义操作的Enum ,然后键入EnumSet<OptionEnum>作为capabilities属性值。 就像您想要的那样,将其序列化为具有字符串值的JSON数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM