【发布时间】:2019-01-03 11:52:00
【问题描述】:
我已经重写了一个名为 Skeleton 的对象的 toString(),所以当我调用 toString() 时,颜色变量被排除在外。
public class Skeleton
{
private List bones;
private Color color;
// getters & setters
@Override
public String toString()
{
String s = null;
ObjectMapper mapper = new ObjectMapper();
mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector(){
@Override
public boolean hasIgnoreMarker(final AnnotatedMember m) {
List<String> exclusions = Arrays.asList("color");
return exclusions.contains(m.getName())|| super.hasIgnoreMarker(m);
}
});
try
{
s = mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return s;
}
}
但是,当我将 Skeleton 对象作为变量添加到名为 Body 的对象并在 Body 上调用 toString() 时,color 字段包括骷髅。
public class Body
{
private Skeleton skeleton = ....
有谁知道如何让 Body 使用 Skeleton 中重写的 toString() 方法?
【问题讨论】:
-
...覆盖
toString()inBody? -
问题当然是在
Body.toString中(可能)使用 ObjectMapper 绕过Skeleton.toString。由于 ObjectMapper 也很昂贵,所以它的使用是有问题的。最小的变化是将toString替换为represent(ObjectMapper, StringWriter)或类似的接口,以使用一个对象映射器遍历整个对象层次结构。 -
看到这个,baeldung.com/jackson-ignore-properties-on-serialization,检查部分
5. Ignore Fields Using Filters。
标签: java jackson tostring objectmapper jackson-databind