【发布时间】:2014-06-08 19:04:50
【问题描述】:
有没有办法让 Jackson 只允许在特定类中对特定类型进行自定义序列化?
这是我的场景: 我有 ClassA.java,类似于:
public Class ClassA {
byte[] token;
String name;
public getToken() {
return token;
}
public setToken(byte[] newToken) {
token = newToken;
}
public getName() {
return name;
}
public setName(String newName) {
name = newName;
}
}
我无权访问此类,因为它位于外部 jar 中。但是,我想在此处以特定方式序列化 token 字节数组。我创建了一个自定义序列化程序来执行此操作,并尝试以杰克逊文档中提到的所有方式将其添加到映射器中。
public class ByteArrayJacksonSerializer extends JsonSerializer<byte[]> {
public void serialize(byte[] value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
String token = doMyThing(value);
jgen.writeString(token);
}
}
而在映射器中,是这样的:
public class MyObjectMapper extends ObjectMapper {
CustomSerializerFactory sf = new CustomSerializerFactory();
sf.addGenericMapping(byte[].class, new ByteArrayJacksonSerializer());
this.setSerializerFactory(sf);
and some more code here...
}
但是,我通常只能对 byte[] 执行此操作,而不能对 ClassA 中的 ONLY byte[] 执行此操作。有没有办法让 Jackson 知道这个自定义序列化程序必须仅用于 ClassA 中的 byte[] 类型的字段,并且以自己的方式对所有其他类进行序列化?
【问题讨论】:
标签: java json serialization jackson