自定义对象映射器
脉冲星使用内部Jackson对象映射器在解码/序列化JSON消息时。
如果你想提供自己的对象映射实例,可以注册一个SchemaResolverCustomizer然后把你的地图仪调到DefaultSchemaResolver如下:
@Bean
SchemaResolverCustomizer<DefaultSchemaResolver> schemaResolverCustomizer() {
return (DefaultSchemaResolver schemaResolver) -> {
var myObjectMapper = obtainMyObjectMapper();
schemaResolver.setObjectMapper(myObjectMapper);
};
}
这会导致你的对象映射器被用来反序列化所有经过模式解析过程的JSON消息(即你在生成或消费消息时没有直接传递模式的情况)。
解析器在底层创建了一个特殊的JSON模式,利用自定义映射器,作为所有解析后的JSON消息的模式。
如果你需要直接传递schema实例,可以用JSONSchemaUtil创建尊重自定义映射器的模式。
以下示例展示了在发送带有脉冲星模板采用模式参数的变体:
void sendMessage(PulsarTemplate<MyPojo> template, MyPojo toSend) {
var myObjectMapper = obtainMyObjectMapper();
var schema = JSONSchemaUtil.schemaForTypeWithObjectMapper(MyPojo.class, myObjectMapper);
template.send(toSend, schema);
}
|
Pulsar 会以特定方式配置其默认对象映射器。 除非你有特别理由不这样做,强烈建议你用以下这些选项配置你的地图器:
|
| 框架的后续版本可能会提供一个基于默认映射器运行的定制器,而不需要单独的实例。 |