gpt4 book ai didi

java - 从 Jackson 反序列化时如何获取要转换的类型

转载 作者:行者123 更新时间:2023-12-01 22:17:41 24 4
gpt4 key购买 nike

通过委托(delegate) Joda Convert 来一般序列化任何类型(例如 Joda DateTime)都很简单。像这样:

public class ToJodaConverter extends SerializerBase<Object> {
protected ToJodaConverter() {
super(Object.class);
}

@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(StringConvert.INSTANCE.convertToString(value));
}
}

我想以同样的方式反序列化,如下所示:

public class FromJodaConverter extends StdDeserializer<Object> {
protected FromJodaConverter() {
super(Object.class);
}

@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return StringConvert.INSTANCE.convertFromString(TYPE, jp.getText());
}
}

但是我如何获得应该转换成的类型呢?我一直在搜索 JsonDeserializer 的其他子类,但找不到如何执行此操作,或者如何使用类型参数实现其他 deserialize 方法。

最佳答案

您需要指定要反序列化的类型:

public class FromJodaConverter<T> extends StdDeserializer<T> {
public FromJodaConverter(Class<T> clazz) {
super(clazz);
}

@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return StringConvert.INSTANCE.convertFromString(handledType(), jp.getText());
}
}

因此,要创建一个反序列化 Foo 实例的 FromJodaConverter,您可以使用

new FromJodaConverter(Foo.class);

要创建一个反序列化 Baz 实例的 FromJodaConverter,您可以使用

new FromJodaConverter(Baz.class);

关于java - 从 Jackson 反序列化时如何获取要转换的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com