2014-06-17 16 views
7

Sử dụng dữ liệu mùa xuân REST Tôi đã phơi bày ProjectRepository hỗ trợ các dự án danh sách và thực hiện các hoạt động CRUD trên chúng. Khi tôi đến http://localhost:8080/projects/ tôi nhận được danh sách các dự án như tôi mong đợi.Hiển thị liên kết trên thực thể thu thập dữ liệu trong mùa xuân REST

Điều tôi đang cố gắng làm là thêm hành động tùy chỉnh vào phần _links của phản hồi JSON cho Bộ sưu tập dự án.

Ví dụ, tôi muốn cuộc gọi đến http://localhost:8080/projects/ trở về một cái gì đó như thế này:

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/projects/{?page,size,sort}", 
     "templated" : true 
    }, 
    "search" : { 
     "href" : "http://localhost:8080/projects/search" 
    }, 
    "customAction" : { 
     "href" : "http://localhost:8080/projects/customAction" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 0, 
    "totalPages" : 0, 
    "number" : 0 
    } 
} 

đâu customAction được định nghĩa trong một số bộ điều khiển.

tôi đã cố gắng tạo ra các lớp sau đây:

public class ProjectCollectionResourceProcessor implements ResourceProcessor<Resource<Collection<Project>>> { 

    @Override 
    public Resource<Collection<Project>> process(Resource<Collection<Project>> listResource) { 
     // code to add the links to customAction here 
     return listResource; 
    } 

} 

và thêm thêm Bean sau để cấu hình các ứng dụng của tôi:

@Bean 
public ProjectCollectionResourceProcessor projectCollectionResourceProcessor() { 
    return new ProjectCollectionResourceProcessor(); 
} 

Nhưng process(...) không bao giờ dường như được gọi. Cách chính xác để thêm liên kết vào Bộ sưu tập tài nguyên là gì?

+0

Xem thêm, câu hỏi này: http://stackoverflow.com/q/40156413 –

Trả lời

4

Tài nguyên bộ sưu tập hiển thị trường hợp Resources<Resource<Project>>, không phải Resource<Collection<Project>>. Vì vậy, nếu bạn thay đổi kiểu gõ chung trong việc thực hiện ResourceProcessor của bạn cho phù hợp sẽ làm việc như bạn mong đợi.

+0

thêm mã dưới đây không giúp 'public class ProjectsResourceProcessor thực hiện \t \t ResourceProcessor > { \t @Autowired \t thực thể EntityLinks riêngLiên kết; \t @ Override \t Tài công quá trình (Tài nguồn lực) { \t \t resources.add (entityLinks.linkFor (Project.class) .slash ("tùy chỉnh") \t \t \t \t .withRel ("tùy chỉnh")); \t \t trả lại tài nguyên; \t} } 'Sử dụng SDR-2.1.0.RELEASE – Stackee007

+0

Để tôi làm cho nó hoạt động, tôi phải triển khai' ResourceProcessor 'và trong mã xác định nếu đó là tài nguyên' Project'. Cảm ơn đã giúp đỡ. –

+0

@ thorben.jakobsen Tôi đang tìm một số tài nguyên (học tập :-) để thực hiện giải pháp của bạn. Tôi cũng có một tài nguyên được phân trang. – Stephane

4

Tôi gặp vấn đề tương tự. Có gì làm việc cho tôi là:

public class ProjectsResourceProcessor implements ResourceProcessor<PagedResources<Resource<Project>>> { 

    private final @NonNull EntityLinks entityLinks; 

    @Override 
    public PagedResources<Resource<Project>> process(PagedResources<Resource<Project>> pagedResources) { 

     ... 

     return pagedResources; 
    } 
} 
+0

khi không có dự án nào tồn tại, liên kết sẽ không xuất hiện: '( – Kakawait

+0

Có một kiểm tra rõ ràng trong phần Tài nguyênProcessorWrapper :: isValueTypeMatch để kiểm tra cho nội dung trống và ngăn chặn bộ xử lý tài nguyên kích hoạt. –

+2

yup phải đối mặt với cùng một vấn đề .. mọi hack để khắc phục điều này –

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