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

113
Vistas
Spring Data Rest ResourceProcessor para excepción de proyección

He creado la siguiente Projection

 @Projection(name = "select", types = {Organisation.class}) public interface OrganisationSelectProjection { Long getId(); String getName(); }

Que quiero usar básicamente en un componente "Seleccionar", así que necesito la menor cantidad de datos posible. Así que también quería eliminar todos los enlaces con un ResourceProcessor , así que creé esto:

 @Bean public ResourceProcessor<Resource<OrganisationSelectProjection>> organisationProcessor() { return resource -> { resource.removeLinks(); return resource; }; }

Sin embargo, parece que esto rompe toda la API, ya que cualquiera que sea el punto final que toque, recibo el siguiente mensaje de excepción org.springframework.hateoas.PagedResources cannot be cast to org.springframework.hateoas.Resource

¿Alguna idea de lo que he hecho mal?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si desea mantener la clase anónima en su lugar, el uso de ResourceSupport en lugar de Resource puede resolver el problema.

 @Bean public ResourceProcessor<ResourceSupport> organisationProcessor() { return resource -> { resource.removeLinks(); return resource; }; }

Pero en este caso, el procesador se usará en todos y cada uno de los recursos, independientemente del tipo de contenido (aunque puede verificarlo dentro del cuerpo del método).

En lugar de un descendiente anónimo de ResourceProcessor , puede definirlo como una clase independiente:

 public class OrganizationResourceProcessor implements ResourceProcessor<Resource<OrganisationSelectProjection>> { @Override public Resource<OrganisationSelectProjection> process(Resource<OrganisationSelectProjection> resource) { resource.removeLinks(); return resource; } } @Bean public OrganizationResourceProcessor organisationProcessor() { return new OrganizationResourceProcessor(); }

El problema que experimentó tiene algo que ver con el borrado de tipos, ya que no hay ningún parámetro de tipo en la implementación de la clase anónima. Su definición es de tipo seguro, pero carece de los datos relacionados con el tipo que se utilizan en el tiempo de ejecución para determinar si un ResourceProcessor en particular puede procesar un recurso. Entonces spring-data-rest piensa que el procesador de organizationProcessor anónimo puede procesar PagedResources y lo alimenta al procesador donde ocurre ClassCastException .

No todo lo que spring-data-rest pasa por ResourceProcessor s es un Resource . Puede haber diferentes descendientes de la clase org.springframework.hateoas.ResourceSupport (como PagedResources en su caso) y la mayoría de ellos no se heredan de Resource .

about 4 years ago · Santiago Trujillo Denunciar
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