在将应用程序迁移到Spring Boot后使用Spring Data Rest时,我观察到具有@Id的实体属性不再编组为JSON

此问题与此 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;
}

是否有一个设置允许我在生成的 JSON 中保留@Id字段,因为我的应用允许用户按该值进行搜索。

谢谢:)


答案 1

默认情况下,Spring Data Rest 不会吐出 ID。但是,您可以通过 exposeIdsFor(..) 方法有选择地启用它。你可以在配置中执行此操作,如下所示

@Configuration
public static class RepositoryConfig extends
        RepositoryRestMvcConfiguration {

    @Override
    protected void configureRepositoryRestConfiguration(
            RepositoryRestConfiguration config) {
        config.exposeIdsFor(Class1.class, Class2.class);
    }
}

答案 2

从Spring Data Rest 2.4开始(如果使用spring-boot 1.3.0.M5,这是一个传递依赖关系),您可以使用PoseatorRestConfigurerAdapter。例如

@Configuration
class SpringDataRestConfig {

    @Bean
    public RepositoryRestConfigurer repositoryRestConfigurer() {

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

    }

}