在春季,默认情况下是否可以对类型使用自定义序列化器/反序列化器?

问题描述

我有一个来自第三方库的类型(来自jooqJSONB),我为以下代码编写了一个自定义序列化器/反序列化器:

@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字段吗?

解决方法

您需要创建新的 "definitions": { "short_string": { "type": "string","maxLength": 20 },... },"properties": { "name": { "$ref": "#/definitions/short_string" },... } 实例并注册所有自定义序列化器和反序列化器。接下来,您需要检查如何在您的com.fasterxml.jackson.databind.module.SimpleModule版本中注册新的自定义模块。

Spring Boot

看看: