我们的一台服务器有一个API端点,有时会在列表中返回MAC地址(最多3个),有时会返回单个MAC地址
可以这样:
{
"mac_addrs": [
"11:11:11:11:11:11",
"22:22:22:22:22:22"
]
}
或者只是:
{
"mac_addr": "33:33:33:33:33:33"
}
现在,在Java方面,我有一个小的PoJo(class MacAddress
)在构造函数中使用String
,将其转换为二进制并提供一些很好的方法,例如验证器,制造商提取器......这样的事情。
我创建了一个Jacskson自定义反序列化器,给定一个包含MAC地址的String
,将其转换为该MacAddress
类的实际实例:
@Override
public MacAddress deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException {
JsonToken currentToken = jp.getCurrentToken();
if (currentToken.equals(JsonToken.VALUE_STRING)) {
return new MacAddress(jp.getValueAsString());
}
return null;
}
它可以用作从RESTful API(来自JSON)加载的类中的注释:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Device {
@JsonDeserialize(using = MacAddressDeserializer.class)
@JsonSerialize(using = MacAddressSerializer.class)
public MacAddress mac;
// . . . moar and moar thingies
现在,问题是:
有没有办法告诉杰克逊(版本2.5.1,但我可以增加它,如果它有帮助)用List<MacAddress>
建模一个类并使用相同的解串器?基本上,能够按照&#34;告诉杰克逊的东西,我不会骗你:你将会收到一个MAC地址列表,所以对于列表中的每个项目,我希望您使用我已在某处定义的MacAddressDeserializer.class
&#34;
我找到了很多示例,但所有这些示例都解释了如何为list of objects,single object或forcing a list even if there's only one object实现反序列化器,但我和#39;我不得不避免编写两个反序列化器,一个用于MacAddress
,另一个用于List<MacAddress>
。有两种方法可以使用相同的反序列化器类吗?
提前谢谢。