首页 > 解决方案 > 是否可以在春季默认使用自定义序列化器/反序列化器作为类型?

问题描述

我有一个来自第三方库(JSONB来自jooq)的类型,我为它编写了一个自定义序列化器/反序列化器:

@JsonComponent
public class JSONBSerializer extends JsonSerializer<JSONB> {
    @Override
    public void serialize(JSONB jsonb, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(jsonb.toString());
    }
}
@JsonComponent
public class JSONBDeserializer extends JsonDeserializer<JSONB> {
    @Override
    public JSONB deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        return JSONB.valueOf(jsonParser.getValueAsString());
    }
}

我想知道是否有办法告诉 spring 或 jackson 默认使用这些,而不必用@JsonSerialize(using = JSONBSerializer.class)and注释项目中的每个 JSONB 字段@JsonDeserialize(using = JSONBDeserializer.class)

标签: javaspringspring-bootjacksonjackson-databind

解决方案


您需要创建新com.fasterxml.jackson.databind.module.SimpleModule实例并注册所有自定义序列化器和反序列化器。接下来,您需要查看如何在您的Spring Boot.

@Bean
public SimpleModule jooqModule() {
    SimpleModule jooqModule = new SimpleModule();
    jooqModule.addSerializer(JSONB.class, new JSONBSerializer());
    jooqModule.addDeserializer(JSONB.class, new JSONBDeserializer());
}

看一眼:


推荐阅读