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) 个答案