Вместо того, чтобы вручную исключать поля в методе toString
, что может быть утомительным и подверженным ошибкам, если другие поля необходимо исключить (или если color
больше не следует исключать), вы можете использовать Jackson @JsonIgnore
аннотация.Затем метод toString
в Skeleton
может быть переопределен для печати сериализованной строки:
public class Skeleton {
private List bones;
@JsonIgnore
private Color color;
@Override
public String toString() {
try {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(this);
}
catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Как упоминалось в комментариях, использование ObjectMapper
для сериализации объекта в String
может бытьдорого, если часто используется toString
метод Skeleton
.Если производительность становится проблемой, ObjectMapper
следует использовать только для сериализации самого верхнего объекта (например, Body
), а не для каждого промежуточного объекта (например, Skeleton
):
public class Skeleton {
private List bones;
@JsonIgnore
private Color color;
// Getters & setters
}
public class Body {
private Skeleton skeleton;
@Override
public String toString() {
try {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(this);
}
catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Редактирование на основе обратной связи ОП
В случае, если вы хотите игнорировать поле только для определенного ObjectMapper
, вы можете создать SimpleBeanPropertyFilter
и указать имяигнорируемое поле:
public class Skeleton {
private List bones;
private Color color;
@Override
public String toString() {
try {
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider()
.addFilter("ignoreColor", SimpleBeanPropertyFilter.serializeAllExcept("color"));
return mapper.writer(filters).writeValueAsString(this);
}
catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Для получения дополнительной информации см. Раздел 5: Игнорировать поля с использованием фильтров на Джексон Игнорировать свойства при маршаллинге .