我在应用程序中需要两个Map器。一个Map所有DTO中的所有字段,另一个跳过包含一些PII的几个字段。
我创建了一个自定义序列化程序:
public class PIIMaskerSerializer extends StdSerializer {
public PIIMaskerSerializer() {
this(null);
}
public PIIMaskerSerializer(Class t) {
super(t);
}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
try {
for (final Field f : value.getClass().getFields()) {
if (!f.isAnnotationPresent(PIIField.class)) {
gen.writeStringField(f.getName(), (String) f.get(value));
}
}
} catch (final Exception e) {
//
}
gen.writeEndObject();
}
}```
在自定义模块中使用此序列化程序:
public PIIMaskerModule() {
addSerializer(new PIIMaskerSerializer());
}
然后用该模块创建一个对象Map器;
但是,我收到此错误:
类型为PIIMaskerSerializer的JsonSerializer未定义有效的handledType()--必须使用采用类型参数的方法注册,或使序列化程序扩展“com.fasterxml.jackson.databind.ser.std.StdSerializer”
此外,我并不是只为一种类型的对象创建自定义序列化程序,而是为任何/所有对象(如开箱即用的objectmapper)创建自定义序列化程序。
非常感谢你的帮助。
1条答案
按热度按时间kxe2p93d1#
好的,我通过反复试验才弄明白的。SimpleModule有问题。
将构造函数从
至
帮我修好了。