web-dev-qa-db-fra.com

Comment faire pour que Jackson ignore une méthode get () lors de la sérialisation d'un objet

J'ai ce code dans une classe nommée Project:

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

Lorsqu'un objet projet est sérialisé, la méthode getAllReleases() est appelée et un champ allReleases est ajouté à l'objet sérialisé.

Si j'ajoute @JsonIgnore Avant la méthode, j'obtiens le même résultat. Je me demande donc comment implémenter une méthode getFoo() qui est ignorée par Jackson lors de la sérialisation de l'objet.

Alternativement, je pourrais faire:

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

mais la solution semble un peu moche, et je suis presque sûr qu'il doit y avoir un mécanisme plus simple fourni par Jackson.

Suis-je en train de manquer quelque chose? TIA

24
NoUserFound

Si vous marquez la méthode getter avec le @JsonIgnore annotation, il ne doit pas être sérialisé. Voici un exemple:

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")));
    }
}

Production:

{
  "name" : "test"
}
38
Alexey Gavrilov