Как заставить Джексона игнорировать метод get() при сериализации объекта

У меня этот код в классе с именем Project:

@Transient
public List<Release> getAllReleases() {
    List<Release> releases = new ArrayList<Release>();
    ...
    return releases;
}

Когда объект проекта сериализуется, вызывается метод getAllReleases(), и к сериализованному объекту добавляется поле allReleases.

Если я добавлю @JsonIgnore до того, как метод получит тот же результат. Поэтому мне интересно, как я могу реализовать метод getFoo(), который игнорируется Джексоном при сериализации объекта.

В качестве альтернативы я мог бы сделать:

static public List<Release> getAllReleases(Project proj) {
    List<Release> releases = new ArrayList<Release>();
    ...
    return releases;
}

но решение выглядит немного уродливо, и я уверен, что должен быть какой-то более простой механизм, предоставляемый Джексоном.

Я что-то упустил? ТИА

Ответы

Ответ 1

Если вы отметите метод getter с аннотацией @JsonIgnore, он не должен быть сериализован. Вот пример:

public class JacksonIgnore {

    public static class Release {
        public final String version;

        public Release(String version) {
            this.version = version;
        }
    }
    public static class Project {
        public final String name;

        public Project(String name) {
            this.name = name;
        }

        @JsonIgnore
        public List<Release> getAllReleases() {
            return Arrays.asList(new Release("r1"), new Release("r2"));
        }
    }

    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new Project("test")));
    }
}

Выход:

{
  "name" : "test"
}

Ответ 2

Вам нужно реализовать JSon-сериализатор, который ничего не делает, а затем устанавливает его с помощью @JSonSerialize (используя = EmptySerializer.class).

Нажмите на ссылку для дальнейшего примера.

Ссылка: Джексон: как предотвратить сериализацию поля