在spring中,是否可以默认为某个类型使用自定义序列化程序/反序列化程序



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

@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)@JsonDeserialize(using = JSONBDeserializer.class)注释项目中的每个JSONB字段?

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

看看:

  • 如何在Spring Boot中注册和使用jackson AfterburnerModule
  • Jackson全局设置将数组取消序列化为自定义列表实现
  • Jackson自定义序列化和反序列化
  • 在Spring Boot中,通过扩展MappingJackson2HttpMessageConverter添加自定义转换器似乎会覆盖现有的转换器
  • 使用Spring Boot和Spring MVC自定义HttpMessageConverter

相关内容

最新更新