Theo mặc định khi chúng tôi có kho lưu trữ có phương pháp lưu, chúng tôi có thể thực hiện yêu cầu PATCH. Sau đó, Spring Data REST lấy đối tượng gốc từ cơ sở dữ liệu và áp dụng các thay đổi cho thực thể và sau đó lưu nó cho chúng ta (bên trong lớp JsonPatchHandler). Điều này cho phép chúng ta làm theo yêu cầu sau cho lớpBộ điều khiển tùy chỉnh dữ liệu mùa xuân với phương pháp vá - cách hợp nhất tài nguyên với thực thể
class Address {
Long id;
String street;
Long houseNumber;
}
PATCH/api/địa chỉ/1 với cơ thể
{ houseNumber: 123 }
Và chỉ có một lĩnh vực này sẽ được thay đổi.
Bây giờ có điều khiển tùy chỉnh chúng tôi muốn trong phương thức cập nhật nhận toàn bộ đối tượng (sau HATEOAS sáp nhập nó với các đối tượng gốc từ DB)
@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);
}
}
Đáng tiếc là ở nơi tôi sẽ làm một số logic Tôi nhận được Địa chỉ với các trường rỗng thay vì đối tượng đã hợp nhất.
Có thể cắm bộ điều khiển tùy chỉnh trong ngăn xếp dữ liệu Spring REST để khi vá yêu cầu, nó sẽ hợp nhất nó cho tôi (giống như đối với các kho lưu trữ thông thường)?
chỉnh sửa: Tôi muốn tìm một giải pháp mà làm việc minh bạch cả với PATCH (content-type: application/json-vá + json) và PATCH (content-type: application/hal + json)
Tôi đã trả lời một câu hỏi tương tự ở đây - https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality/33297619#33297619 –
Bản sao có thể có của [ Yêu cầu bản vá HTTP Spring MVC tùy chỉnh với chức năng Khôi phục dữ liệu mùa xuân] (https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality) –
thực sự là câu hỏi là tương tự, tuy nhiên tôi muốn tìm một giải pháp hoạt động rõ ràng cả với PATCH (content-type: application/json-patch + json) và PATCH (content-type: application/hal + json) - một giải pháp do bạn đề xuất chỉ có thể làm việc với json-patch –