@JsonTypeInfo有一个选项可以指定默认的实现类,但是在进行一些调试后,我发现WrapperObject的“ defaultImpl”已损坏。组态:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include= JsonTypeInfo.As.WRAPPER_OBJECT, defaultImpl = UnknownProduct.class)
杰克逊实现(AsWrapperTypeDeserializer):
public AsWrapperTypeDeserializer(JavaType bt, TypeIdResolver idRes, String typePropertyName, boolean typeIdVisible, Class<?> defaultImpl){ super(bt, idRes, typePropertyName, typeIdVisible, null);}请注意,传递了“
defaultImpl”,但它将被忽略,并且不会使用配置的默认类。我在杰克逊(Jackson)的吉拉(Jira)中找不到解决此问题的记录的票证。
仅对于WRAPPER_OBJECT这是一个问题,defaultImpl对于其他格式也可以正常工作。但是它将更改JSON格式。如果可以更改,则可以使用EXTERNAL_PROPERTY作为默认实现:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include= JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type", defaultImpl = UnknownProduct.class)
另一个解决方案:如果必须使用WRAPPER_OBJECT,则可以配置Jackson找不到未知的SubType时不会失败:
objectMapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false);
它与您的要求并不完全相同,但是在这种情况下,您的产品将为空。可能您可以将null视为未知产品。
*我提交了杰克逊错误的 *更新 :https : //github.com/FasterXML/jackson-
databind/issues/656
更新 此票证已针对2.3和2.4杰克逊解决,希望当将jar重新安装到maven存储库或以新版本安装时,您应该能够使用它。



