默認情況下,當我們有一個存儲方法暴露的存儲方法時,我們可以執行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)
我在這裏回答了一個類似的問題 - https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality/33297619#33297619 –
可能重複的[使用Spring Data Rest功能定製Spring MVC HTTP修補程序請求](https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality) –
的確如此問題是類似的,但我想找到一個透明地與PATCH(content-type:application/json-patch + json)和PATCH(content-type:application/hal + json)兼容的解決方案 - 您提出的解決方案只能使用json-patches –