2014-12-09 23 views
14

Hiện nay tôi đang phơi bày một vài dữ liệu mùa xuân Repositories dịch vụ như RESTful bằng cách chú thích chúng với @RepositoryRestResource như thế này:Làm thế nào để trộn Xuân Repositories dữ liệu và điều khiển Xuân Nghỉ ngơi

@RepositoryRestResource(collectionResourceRel = "thing1", path = "thing1") 
public interface Thing1Repository extends PagingAndSortingRepository<Thing1, String> {} 

@RepositoryRestResource(collectionResourceRel = "thing2", path = "thing2") 
public interface Thing2Repository extends CrudRepository<Thing2, String> {} 

này tất cả các công trình lớn. Khi bạn nhấn endpoint đầu tiên của tôi cũng thấy tất cả các dữ liệu Repositories mùa xuân Tôi đã tiếp xúc, như thế này:

{ 
    _links: { 
     thing1: { 
     href: "http://localhost:8080/thing1{?page,size,sort}", 
     templated: true 
     }, 
     thing2: { 
     href: "http://localhost:8080/thing2" 
     } 
    } 
} 

Bây giờ tôi có một số điểm cuối Tôi muốn phơi bày mà không thể được đại diện bởi Spring liệu Repositories, vì vậy tôi đang sử dụng một RestController.

Dưới đây là một ví dụ đơn giản:

@RestController 
@ExposesResourceFor(Thing3.class) 
@RequestMapping("/thing3") 
public class Thing3Controller { 

    @Autowired 
    EntityLinks entityLinks; 

    @Autowired 
    Thing3DAO thing3DAO; 

    //just assume Thing3.class extends ResourceSupport. I know this is wrong, but it makes the example shorter 
    @RequestMapping(value = "/{id}", produces = "application/json") 
    Thing3 thing3(@PathVariable("id") String id) 
    { 
     Thing3 thing3 = thing3DAO.findOne(id);   

     Link link = entityLinks.linkToSingleResource(Thing3.class, id); 
     thing3.add(link); 

     return thing3; 
    } 
} 

Bây giờ nếu tôi chạy ứng dụng này và đi đến:

http://localhost:8080/thing3/{id} 

tôi làm được một đại diện JSON của Thing3 với một liên kết đến bản thân, mà hoạt động như mong đợi.

Những gì tôi muốn tìm ra cách để làm là có thiết bị đầu cuối đầu tiên cũng diễn tả điều khiển này. Về cơ bản tôi muốn điều này:

{ 
    _links: { 
     thing1: { 
     href: "http://localhost:8080/thing1{?page,size,sort}", 
     templated: true 
     }, 
     thing2: { 
     href: "http://localhost:8080/thing2" 
     }, 
     thing3: { 
     href: "http://localhost:8080/thing3" 
     } 
    } 
} 

Tôi cần làm gì để có điểm cuối cơ sở của mình có liên kết đến bộ điều khiển này?

+0

thể trùng lặp của [phản ứng tuỳ chỉnh cho yêu cầu gốc int Xuân REST của HATEOAS với cả RepositoryRestResource -s và bộ điều khiển thường xuyên] (http://stackoverflow.com/questions/25783487/custom-response-for-root-request-int-the-spring-rest-hateoas-with-both-repositor) – zeroflagL

+1

làm thế nào bạn có được để có @RestController làm việc với spring-hateoas? Ngoài ra, tôi đang cố gắng hiểu phương thức 'thing3.add' từ đâu. Làm thế nào để bạn quản lý cho một tập hợp các thực thể? – BigDong

Trả lời

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