Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

114
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda