Java 整数字段而非字符串上的Jackson多态反序列化

Java 整数字段而非字符串上的Jackson多态反序列化,java,json,jackson,Java,Json,Jackson,我熟悉普通的多态反序列化技术,其中基于某个字段的字符串值反序列化对象。例如: @JsonSubTypes( { @JsonSubTypes.Type(value = LionCage.class, name = "LION"), @JsonSubTypes.Type(value = TigerCage.class, name = "TIGER"), } ) @JsonTypeInfo

我熟悉普通的多态反序列化技术,其中基于某个字段的字符串值反序列化对象。例如:

@JsonSubTypes(
          {
              @JsonSubTypes.Type(value = LionCage.class, name = "LION"),
              @JsonSubTypes.Type(value = TigerCage.class, name = "TIGER"),
          }
         )
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
如果传入对象的“type”字段是一个整数而不是一个字符串,那么有什么方法可以做基本相同的事情吗?所以在上面的例子中,“狮子”和“老虎”是1和2。不管出于什么原因,我一直没能弄明白


还有,我该怎么弄清楚呢?看起来应该是显而易见的。

不,这不是通过注释的选项。接口获取并返回字符串。您可以使用Jackson的stream API使用自定义解析器/序列化程序来实现这一点,但将其切换到数字字段似乎需要大量的工作。我只会在别人的系统需要的时候做。如果我拥有整个东西,我会使用你在问题中发布的设置。

杰克逊会自动将字符串转换为数字,反之亦然。只需对数字使用字符串值。对于
1
值,类似于
“1”
。你自己试试这个(jackson版本是
2.5.1
):

输出为:

2.5.1
{"type":"1"}
{"type":"2"}
class HelloWorldJacksonNumber$A
class HelloWorldJacksonNumber$B

只要模型类使用字符串作为外部属性,Integer就可以了。Jackson很聪明,似乎可以为您将整数转换为字符串。如果您对细节感兴趣,我在这里也做了类似的事情:
2.5.1
{"type":"1"}
{"type":"2"}
class HelloWorldJacksonNumber$A
class HelloWorldJacksonNumber$B