【发布时间】:2012-10-19 15:07:35
【问题描述】:
我想配置一个 Jackson 反序列化器,根据带注释字段的目标类型,它的行为会有所不同。
public class Car {
@JsonSerialize(using=IdSerializer.class)
@JsonDeserialize(using=IdDeserializer.class)
String id
}
public class Bus {
@JsonSerialize(using=IdSerializer.class)
@JsonDeserialize(using=IdDeserializer.class)
Id id
}
Jackson 序列化器知道它转换数据的类型,所以这是有效的:
public class IdSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGen, SerializerProvider provider) throws IOException {
// value is the annotated field class
if(value instanceof String)
jsonGen.writeObject(...);
else if (value instanceof Id)
jsonGen.writeObject(...);
else
throw new IllegalArgumentException();
}
}
Jackson 反序列化器似乎不知道它将数据转换成的目标类型:
public class IdDeserializer extends JsonDeserializer<Object> {
@Override
public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException {
// what is the annotated field class?
}
}
【问题讨论】:
-
您可以在序列化中添加一些类型信息。
-
@KyleRenfro 你能提供一个代码示例吗?谢谢。
标签: java annotations jackson