starter restresource repositoryrestresource pageable excerptprojection example data custom spring spring-boot spring-data-rest

restresource - spring data rest base path



Al utilizar Spring Data Rest después de migrar una aplicación a Spring Boot, he observado que las propiedades de la entidad con @Id ya no están organizadas en JSON (4)

A partir de Spring Data Rest 2.4 (que es una dependencia transitiva si se usa spring-boot 1.3.0.M5) puede usar RepositoryRestConfigurerAdapter . Por ejemplo,

@Configuration class SpringDataRestConfig { @Bean public RepositoryRestConfigurer repositoryRestConfigurer() { return new RepositoryRestConfigurerAdapter() { @Override public void configureRepositoryRestConfiguration( RepositoryRestConfiguration config) { config.exposeIdsFor(Class1.class, Class2.class); } } } }

Esta pregunta está relacionada con esta pregunta SO ( Spring boot @ResponseBody no serializa la identidad de la entidad ). He observado que después de migrar una aplicación a Spring Boot y usar la dependencia spring-boot-starter-data-rest, mis campos entity ID ya no se organizan en el JSON resultante.

Esta es mi asignación de solicitud y, mientras se realiza la depuración, puedo ver que los datos no se están cambiando antes de devolverlos, por lo que las propiedades @Id se eliminan más adelante.

@RequestMapping(method = RequestMethod.GET, produces = {"application/json"}) public PagedResources<Receipt> receipts(Pageable pageable, PagedResourcesAssembler assembler) { Page<Receipt> receipts = receiptRepository.findByStorerAndCreatedDateGreaterThanEqual("003845", createdStartDate, pageable); PagedResources<Receipt> pagedResources = assembler.toResource(receipts, receiptResourceAssembler); return pagedResources; }

¿Hay alguna configuración que me permita mantener el campo @Id en el JSON resultante porque mi aplicación permite que el usuario busque por ese valor?

Gracias :)


Antes de exponer Id por favor, lea de https://github.com/spring-projects/spring-hateoas/issues/66

En REST, la identificación de un recurso es su URI

https://github.com/spring-projects/spring-hateoas/issues/66#issuecomment-34968272

El cliente no usa explícitamente la identificación para construir una url. Por ejemplo, podría reemplazar su ID por un uuid, por ejemplo. O incluso cambiar el esquema de url.

Y aquí hay una muestra de aplicación de trabajo con hypermedia y enlaces: https://github.com/spring-projects/spring-hateoas/issues/66#issuecomment-62175087


Por defecto, Spring Data Rest no escindir ID. Sin embargo, puede habilitarlo de forma selectiva mediante el método exposeIdsFor (..) . Podrías hacer esto en la configuración, algo como esto

@Configuration public static class RepositoryConfig extends RepositoryRestMvcConfiguration { @Override protected void configureRepositoryRestConfiguration( RepositoryRestConfiguration config) { config.exposeIdsFor(Class1.class, Class2.class); } }


La anotación @Id en tu clase de modelo hace la magia.

public class Location { @Id private String woeid; private String locationName;

Entonces tu objeto mongo se verá así:

{ "_id" : "2487889", "_class" : "com.agilisys.weatherdashboard.Location", "locationName" : "San Diego, CA" }