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