Saltar al contenido

Serialización de Jackson: cómo ignorar las propiedades de la superclase

Hacemos una revisión profunda cada una de las noticias de nuestro sitio web con el objetivo de mostrarte siempre información certera y certera.

Solución:

Puede registrar un intropector de anotación de Jackson personalizado que ignoraría todas las propiedades que provienen de cierto supertipo. Aquí hay un ejemplo:

public class JacksonIgnoreInherited 

    public static class Base 
        public final String field1;

        public Base(final String field1) 
            this.field1 = field1;
        
    

    public static class Bean extends Base 
        public final String field2;

        public Bean(final String field1, final String field2) 
            super(field1);
            this.field2 = field2;
        
    

    private static class IgnoreInheritedIntrospector extends JacksonAnnotationIntrospector 
        @Override
        public boolean hasIgnoreMarker(final AnnotatedMember m) 
            return m.getDeclaringClass() == Base.class 
    

    public static void main(String[] args) throws JsonProcessingException 
        final ObjectMapper mapper = new ObjectMapper();
        mapper.setAnnotationIntrospector(new IgnoreInheritedIntrospector());
        final Bean bean = new Bean("a", "b");
        System.out.println(mapper
                        .writerWithDefaultPrettyPrinter()
                        .writeValueAsString(bean));
    


Producción:

“campo2” : “b”

Puede anular los métodos de la superclase que le gustaría evitar que se emitan y anotarlos con @JsonIgnore. La anulación cambia el control de la creación de propiedades a la subclase al tiempo que habilita su capacidad para filtrarla desde la salida.

Por ejemplo:

public class SomeClass 
  public void setField1(...);
  public Integer getField1();

  public void setField2(...);
  public Integer getField2();

  @Override
  @JsonIgnore
  public String superClassField1(...)
      return super.superClassField1();
  ;

  @Override
  @JsonIgnore
  public String superClassField2(...)
      return super.superClassField2();
  ;
...

También puede usar esto en lugar de anulaciones innecesarias

@JsonIgnoreProperties( "aFieldFromSuperClass")
public class Child extends Base 
   private String id;       
   private String name; 
   private String category;
 

Si tienes algún reparo y disposición de arreglar nuestro ensayo puedes ejecutar una explicación y con placer lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *