我一直在为我的一个类使用自定义的typeId解析器,到目前为止,我一直依赖于注释支持:
@JsonTypeInfo(
use = JsonTypeInfo.Id.CUSTOM,
include = JsonTypeInfo.As.PROPERTY,
property = "@type")
@JsonTypeIdResolver(ColumnDefinitionTypeResolver.class)
但是现在我需要通过构造函数或setter向它传递一些其他依赖项来定制类型解析器的创建,而且由于jackson是实例化它的人,我找不到绕过它的方法。
是否有方法将ObjectMapper配置为使用TypeIdResolver而不是依赖注释?
问候
还可以以编程方式设置自定义类型id解析器。看上面的答案。看看这一行:
typeResolver.init(JsonTypeInfo.Id.CLASS, null);
用类型id解析程序替换null
。
因此您有两种选择:
1)如果您设置为使用@JSONTypeIDResolver
,您的TypeIDResolver
中的stuck usingstatic
状态。这可能不是您想要的。
默认的JacksonAnnotationIntrospector
将尝试根据其默认构造函数创建您使用JsonTypeIDResolver
提供的类型的实例。目前无法将其配置为其他操作。
public final class ColumnDefinitionTypeResolver implements TypeIdResolver {
// You could rely on static state.
public static String SOME_ACCESSIBLE_OBJECT = null;
public ColumnDefinitionTypeResolver() {
// This is what gets called.
}
}
ColumnDefinitionTypeResolver.SOME_ACCESSIBLE_OBJECT = "I can affect the implementation from here, but using static state ... be careful";
2)创建一个模块来处理类型和子类型反序列化。
SimpleModule columnDefinitionModule = new SimpleModule("colDefMod", new Version(1, 0, 0, null))
.addDeserializer(ColumnDefinition.class, new JsonDeserializer() {
@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// Need to read the type out and then use ObjectMapper to deserialize using the correct token
}
})
.registerSubtypes(...); // add your subtypes here.
(new ObjectMapper()).registerModule(columnDefinitionModule);
有关更详细的示例,请参见jackson文档操作:自定义反序列化器。
JSON文档有一个属性,其中包含一组对象(也可以是使用属性名称作为键的映射)。这是唯一一个在JSON中完全序列化columns对象的地方。在其他任何地方,列都使用唯一的属性进行引用 引用可用于映射键和值 我想将此文档反序列化并: 解析属性中对应对象的引用 使用相同的java对象实例(列类是不可变的),而不是每次都创建一个新的。(我想减少对象的数量) JsonIdtyInfoesnt不适用于地图键。
本文向大家介绍SpringBoot自定义FailureAnalyzer过程解析,包括了SpringBoot自定义FailureAnalyzer过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringBoot自定义FailureAnalyzer,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 官网说明 1.1 创建自己的 Fa
我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N
我试图创建会影响序列化值的自定义jackson注释。 意思是: 现在序列化对象X(10)将导致: 我怎样才能做到这一点?
本文向大家介绍pyqt5自定义信号实例解析,包括了pyqt5自定义信号实例解析的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下。 PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义signal。可以使用pyqtSignal()方法定义新的信号,新的信号作为类的属性。 自定义si
本文向大家介绍基于自定义Toast全面解析,包括了基于自定义Toast全面解析的使用技巧和注意事项,需要的朋友参考一下 Toast一般用来显示一行文字,用法比较固定: 但是有时候想用toast 来显示复杂的view甚至是带有图片的view时这时候就要用到自定义的Toast,自定义Toast主要用到一下几个方法如图: 1.setView()方法用来显示用户自定义的view. 2. setGravit