java - 是否可以在 spring 中默认为类型使用自定义序列化器/反序列化器?

标签 java spring spring-boot jackson jackson-databind

我有一个来自第三方库的类型(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) 注释项目中的每个 JSONB 字段和 @JsonDeserialize(using = JSONBDeserializer.class)

最佳答案

您需要创建新的 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());
}

看看:

关于java - 是否可以在 spring 中默认为类型使用自定义序列化器/反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64505346/

相关文章:

java - 如何在 Java Springboot 中使用 jdbcTemplate 将整数数组插入到 postgresql 表中?

java - Spring Boot 生产监控

spring-boot - 如何使用下划线变量解决 Spring Boot findBy 方法

java - 重置后,以不同方式声明和初始化的持久数组会发生什么情况?

java - Hibernate 不创建我的表

docker - 如何通过Zuul代理从一种微服务访问另一种微服务

java - 如何在 Spring Boot 中的其余 Controller 方法端点上应用 json 忽略注释?

java - 如何找到最大数组值的索引?

java - 将 Azure Blob 项转换为 Java 文件对象

java - Hadoop执行时出错: Type mismatch in key from map: expected org. apache.hadoop.io.Text,收到org.apache.hadoop.io.LongWritable