writevalueasstring serialize parse deserialize java json serialization jackson

java - serialize - objectmapper writevalueasstring



Cómo hacer que Jackson ignore un método get() al serializar un objeto (2)

Tengo este código en una clase llamada Project :

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

Cuando un objeto de proyecto se serializa, se llama al método getAllReleases() y se allReleases un campo allReleases al objeto serializado.

Si agrego @JsonIgnore antes del método obtengo el mismo resultado. Así que me pregunto cómo puedo implementar un método getFoo() que Jackson ignora al serializar el objeto.

Alternativamente podría hacer:

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

pero la solución parece un poco fea, y estoy bastante seguro de que debe haber algún mecanismo más simple provisto por Jackson.

¿Me estoy perdiendo de algo? TIA


Debe implementar un serializador JSon que no haga nada y luego configurarlo utilizando @JSonSerialize (utilizando = EmptySerializer.class).

Haga clic en la referencia para ver otro ejemplo.

Referencia: Jackson: cómo prevenir la serialización de campo.


Si marca el método de @JsonIgnore con la anotación @JsonIgnore , no se debe serializar. Aquí hay un ejemplo:

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

Salida:

{ "name" : "test" }