Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

324
Views
¿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?

about 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!