2014-07-24 5 views
18

此問題與此SO問題有關(Spring boot @ResponseBody doesn't serialize entity id)。我觀察到,在將應用程序遷移到Spring Boot並使用spring-boot-starter-data-rest依賴項後,我的實體@Id字段不再在生成的JSON中編組。將應用程序遷移到Spring Boot後使用Spring 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,因爲我的應用程序允許用戶通過該值來搜索設置。

謝謝:)

回答

23

默認情況下,Spring Data Rest不會吐出ID。不過你可以選擇通過exposeIdsFor(..)方法啓用它。你可以在配置中做到這一點,像這樣

@Configuration 
public static class RepositoryConfig extends 
     RepositoryRestMvcConfiguration { 

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

它應該是注意到如果你使用的是spring-boot,你需要擴展'SpringBootRepositoryRestMvcConfiguration'而不是'RepositoryRestMvcConfiguration',並且使它成爲一個普通的類而不是靜態類。 – jax

+7

從版本2.4開始,'configureRepositoryRestConfiguration'方法應該通過擴展'RepositoryRestConfigurerAdapter'類來覆蓋。 –

+2

別忘了現在支持getter和setter爲實體類中的id字段!(我忘了它,並且正在爲此尋找很多時間) – flipperweid

16

由於Spring數據休息2.4(這是如果使用彈簧啓動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); 
      } 
     } 

    } 

} 
8

Befor暴露Id已經閱讀請的https://github.com/spring-projects/spring-hateoas/issues/66

在REST資源的id是其URI

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

客戶沒有按不顯式使用該id來構建url。例如,您可以將您的id替換爲uuid。甚至可以更改網址方案。

這裏是超媒體和鏈接工作的應用程序示例:在你的模型類https://github.com/spring-projects/spring-hateoas/issues/66#issuecomment-62175087

0

@Id註釋確實神奇。

public class Location { 

    @Id 
    private String woeid; 
    private String locationName; 

然後你蒙戈對象將是這樣的:

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

把 @Getter,@setters,它會接觸到JSON結果,希望它會幫助你

相關問題