自定义 JsonNullable 反序列化过程的正确方法是什么

问题描述 投票:0回答:1

我想自定义

JsonNullable<Boolean>
反序列化过程。所以我找到了类 JsonNullableDeserializer :

我已经实现了自己的解串器:

public class MyJsonNullableDeserializer extends JsonNullableDeserializer {

    private static final long serialVersionUID = 1L;

    private boolean isBooleanDeserializer = false;
  
    public JsonNullableDeserializer(JavaType fullType, ValueInstantiator inst,
                                    TypeDeserializer typeDeser, JsonDeserializer<?> deser) {
          ....
        }
    }

    @Override
    public JsonNullable<Object> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonToken t = p.getCurrentToken();
        if (t == JsonToken.VALUE_STRING && isBooleanDeserializer && p.getText().trim().isEmpty() ) {
          throw new IllegaArgumentException("....");
        }
        return super.deserialize(p, ctxt);
    }

现在我想注册

MyJsonNullableDeserializer
但不知道如何注册。

我看到班级了

public class JsonNullableDeserializers extends Deserializers.Base {

    @Override
    public JsonDeserializer<?> findReferenceDeserializer(ReferenceType refType,
                                                         DeserializationConfig config, BeanDescription beanDesc,
                                                         TypeDeserializer contentTypeDeserializer, JsonDeserializer<?> contentDeserializer) {
        return (refType.hasRawClass(JsonNullable.class)) ? new JsonNullableDeserializer(refType, null, contentTypeDeserializer,contentDeserializer) : null;
    }
}

看来我得换了

JsonNullableDeserializer
MyJsonNullableDeserializer

我不知道如何更换它。你能帮忙吗?

spring-boot jackson json-deserialization jackson-databind jsonnullable
1个回答
0
投票

usage

的GitHub页面中README.md的
JsonNullable
部分表示,为了使用它,您需要在您的
ObjectMapper
上注册相应的模块。

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.registerModule(new JsonNullableModule());
© www.soinside.com 2019 - 2024. All rights reserved.