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"
}