2017-05-31 14 views
5

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)

+0

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 –

+0

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) –

+0

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 –

Trả lời

0

Sau khi duyệt nguồn Spring tôi chưa tìm được giải pháp hợp lý. Kết quả là tôi đã tạo ra vấn đề trong họ - JIRA

Đối với thời điểm này workaround hợp lý chỉ sau - tạo ra bộ điều khiển tùy chỉnh mà có PersitentEntityResource như một tham số và có cả {id}{kho} placeholders trong đường đi của nó tức là

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

mà làm cho thiết bị đầu cuối gọi /địa chỉ/123/địa chỉ

Các vấn đề liên quan