2017-05-31 52 views
5

默認情況下,當我們有一個存儲方法暴露的存儲方法時,我們可以執行PATCH請求。然後,Spring Data REST從數據庫中檢索原始對象,並將更改應用於實體,然後將其保存(在JsonPatchHandler類中)。這允許我們做如下請求類使用修補方法的Spring Data Rest定製控制器 - 如何將資源與實體合併

class Address { 
    Long id; 
    String street; 
    Long houseNumber; 
} 

PATCH/API /地址/ 1與身體

{ houseNumber: 123 } 

而且只有這一個領域將被改變。

現在有定製控制器,我們想在update方法接收到完整的對象

@RepositoryRestController 
@ExposesResourceFor(Address.class) 
@ResponseBody 
@RequestMapping("/addresses") 
public class AdddressController { 

    @PatchMapping("/{addressId}") 
    public Resource<Address> update(@RequestBody Resource<Address> addressResource, @PathVariable Long addressId) { 
     Address address= addressResource.getContent(); 
     // .... some logic 
     address = addressRepository.save(address); 
     return new Resource<>(address); 
    } 
} 

不幸的是,我會做一些邏輯的地方(HATEOAS從DB原來的對象合併後)我得到地址空字段而不是合併對象。

是否有可能將自定義控制器插入到Spring Data REST堆棧中,以便在修補請求時將它合併爲我(與正常存儲庫一樣)?

編輯: 我想找到與PATCH透明地工作既是一個解決方案(內容類型:應用/ JSON-補丁+ JSON)和PATCH(內容類型:應用/ HAL + JSON

+0

我在這裏回答了一個類似的問題 - https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality/33297619#33297619 –

+0

可能重複的[使用Spring Data Rest功能定製Spring MVC HTTP修補程序請求](https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality) –

+0

的確如此問題是類似的,但我想找到一個透明地與PATCH(content-type:application/json-patch + json)和PATCH(content-type:application/hal + json)兼容的解決方案 - 您提出的解決方案只能使用json-patches –

回答

0

瀏覽Spring源碼後,我還沒有找到合理的解決方案。因此,我已經創建了問題他們 - JIRA

眼下唯一合理的解決辦法是繼 - 創建具有PersitentEntityResource作爲參數,並同時具有{ID}{}庫定製控制器佔位符在其即

@PatchMapping("/addresses/{id}/{repository}") 
public Resource<Address> update(PersistentEntityResource addressResource) { 
    ... 
} 

路徑這使得調用端點/地址/ 123 /地址

相關問題