Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

332
Vistas
¿Por qué Jackson ignora las anotaciones en clase pero respeta las anotaciones mixtas?

Uso la versión 2.2.2 de swagger-codegen-maven-plugin para generar clases de Java para una API REST. La API usa polimorfismo y Swagger proporciona las anotaciones correspondientes:

 @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true ) @JsonSubTypes({ @Type(value = Cat.class, name = "Cat"), @Type(value = Dog.class, name = "Dog") }) public class Pet{ @JsonProperty("type") private String type = null; // getter and setters }

Ahora uso un ObjectMapper de Jackson para analizar la cadena JSON entrante. Uso el Jackson que viene con 1.5.2.RELEASE de spring-boot-starter-parent :

 ObjectMapper mapper = new ObjectMapper(); String body = "{ \"pet\": { \"type\": \"Dog\" } }"; Content content = mapper.readValue(body, Content.Class);

Sin embargo, esto falla. Jackson ignora las anotaciones y asigna todo a Pet en lugar de Dog :

 Dog dog = (Dog) content.getPet(); // -> ClassCastException

Como solución alternativa, agregué anotaciones mixtas que no hacen nada más que las anotaciones originales. La única diferencia es que residen en una clase separada:

 @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) @JsonSubTypes({ @Type(value = Cat.class, name = "Cat"), @Type(value = Dog.class, name = "Dog")}) public class PetAnnotations { }

Ahora esto funciona:

 // like above mapper.addMixInAnnotations(Pet.class, PetAnnotations.class); Content content = mapper.readValue(body, Content.Class); Dog dog = (Dog) content.getPet(); // -> works!

¿Alguna idea de por qué Jackson ignora las anotaciones en clase pero respeta las anotaciones que entrego explícitamente como complementos?

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda