Java Jacskon中的同一反序列化程序可以用于列表项还是单个项?

Java Jacskon中的同一反序列化程序可以用于列表项还是单个项?,java,json,jackson,json-deserialization,Java,Json,Jackson,Json Deserialization,我们的一台服务器有一个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(类MacAddress),它在构造函数中接受一个字符串,将其转换为二进制,并提

我们的一台服务器有一个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(
类MacAddress
),它在构造函数中接受一个
字符串
,将其转换为二进制,并提供一些很好的方法,例如验证器、制造商提取器。。。诸如此类的事情

我创建了一个Jacskson自定义反序列化程序,在给定包含MAC地址的
字符串时,将其转换为该
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)加载的类中的注释:

现在,问题是:

有没有办法告诉Jackson(版本2.5.1,但如果有帮助的话,我可以增加它)用
列表对类进行建模,并对单个类使用相同的反序列化器?基本上,我可以告诉Jackson这样的话:“我没有骗你:你会收到一个MAC地址列表,所以对于列表中的每一项,我希望你使用我已经在某处定义的
MacAddressDeserializer.class

我已经找到了很多例子,但它们都解释了如何为a、或a、或for实现反序列化程序,但我希望避免编写两个反序列化程序,一个用于
MacAddress
,另一个用于
List
。有没有一种方法可以同时使用同一个反序列化器类


提前谢谢。

为什么不直接在
ObjectMapper
上注册
MacAddressDeserializer
,而不添加注释?我想这会给你预期的结果。哦!谢谢你的回复。。。好。。答案是“因为我不知道怎么做”,但你给了我一个很好的暗示。我要开始挖了!:)谢谢@varren这里是文档,顺便说一句,如果您只想将字符串映射到POJO,我认为您不需要自定义反序列化程序。单字符串构造函数/工厂方法应该足够多,还有一个提示。。。如果您想将POJO序列化回字符串,可以在
MacAddress
string getter上使用
@JsonValue
。感谢所有提示!最大的问题(由于我缺乏知识)是我将Jackson与Google API结合使用,我看不清楚在哪里注册自定义序列化程序。但是你已经给了我很多提示了!我将尝试研究一下:)再次感谢:+1:为什么不直接在
ObjectMapper
上注册
MacAddressDeserializer
,而不添加注释?我想这会给你预期的结果。哦!谢谢你的回复。。。好。。答案是“因为我不知道怎么做”,但你给了我一个很好的暗示。我要开始挖了!:)谢谢@varren这里是文档,顺便说一句,如果您只想将字符串映射到POJO,我认为您不需要自定义反序列化程序。单字符串构造函数/工厂方法应该足够多,还有一个提示。。。如果您想将POJO序列化回字符串,可以在
MacAddress
string getter上使用
@JsonValue
。感谢所有提示!最大的问题(由于我缺乏知识)是我将Jackson与Google API结合使用,我看不清楚在哪里注册自定义序列化程序。但是你已经给了我很多提示了!我将尝试研究一下:)再次感谢:+1:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Device {
    @JsonDeserialize(using = MacAddressDeserializer.class)
    @JsonSerialize(using = MacAddressSerializer.class)
    public MacAddress mac;
    // . . . moar and moar thingies