这个问题与此SO问题有关(Spring boot @ResponseBody不会序列化实体id)。我观察到,在将应用程序迁移到Spring Boot并使用spring-boot-starter-data-rest依赖关系之后,我的实体@Id字段不再编组到结果JSON中。
这是我的请求映射,在调试时,我可以看到数据在返回之前没有被更改,因此稍后将删除@Id属性。
@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; }
是否有一个设置可以让我将@Id字段保留在结果JSON中,因为我的应用允许用户按该值进行搜索。
谢谢 :
默认情况下,Spring Data Rest不吐出ID。但是,你可以通过ExposureIdsFor(..)方法有选择地启用它。你可以在配置中执行以下操作
@Configuration public static class RepositoryConfig extends RepositoryRestMvcConfiguration { @Override protected void configureRepositoryRestConfiguration( RepositoryRestConfiguration config) { config.exposeIdsFor(Class1.class, Class2.class); } }
从Spring Data Rest 2.4开始(如果使用spring-boot 1.3.0.M5,则为传递依赖项),你可以使用RepositoryRestConfigurerAdapter。例如,
@Configuration class SpringDataRestConfig { @Bean public RepositoryRestConfigurer repositoryRestConfigurer() { return new RepositoryRestConfigurerAdapter() { @Override public void configureRepositoryRestConfiguration( RepositoryRestConfiguration config) { config.exposeIdsFor(Class1.class, Class2.class); } } } }