2014-09-10 21 views
10

Có thể cho phép phương thức truy vấn @Params là tùy chọn, cụ thể trong trường hợp REST dữ liệu Spring không?Phương pháp truy vấn dữ liệu mùa xuân với tùy chọn @Param

Ví dụ: tôi muốn liên kết một tìm kiếm rất giống với cùng một đường dẫn tài nguyên. Để thực hiện điều này ngay bây giờ, tôi sẽ cần một cái gì đó như sau:

@RestResource(path = "driver", rel = "byDriver") 
List<Bar> findByDriverId(@Param("id") String id, Pageable pageable); 

@RestResource(path = "driverAndSpan", rel = "byDriverAndSpan") 
List<Bar> findByDriverIdAndStartTimeGreaterThanEqualAndEndTimeLessThanEqual(@Param("id") String id, @Param("start") Date start, 
     @Param("end") Date end, Pageable pageable); 

nào mang lại cho tôi:

byDriver: { 
    href: "http://localhost:8080/foo/search/driver{?id,page,size,sort}", 
}, 
byDriverAndSpan: { 
    href: "http://localhost:8080/foo/search/driverAndSpan{?id,start,end,page,size,sort}", 
} 

Những gì tôi muốn là để có thể nhìn thấy một cái gì đó giống như đường dẫn sau, nơi startend là các tham số tùy chọn, thay vì xác định nhiều phương thức trong Kho lưu trữ của tôi.

byDriverAndSpan: { 
    href: "http://localhost:8080/foo/search/driverAndSpan{?id,*start,*end,page,size,sort}", 
} 

Những khả năng có thể trông giống như:

@RestResource(path = "driverAndSpan", rel = "byDriverAndSpan") 
List<Bar> findByDriverIdAndStartTimeGreaterThanEqualAndEndTimeLessThanEqual(@Param("id") String id, @Param(value = "start", optional = true) Date start, 
     @Param(value = "end", optional = true) Date end, Pageable pageable); 
+0

Đào ra một bài đăng cũ ... Tôi ngạc nhiên không ai đề cập đến [Querydsl] (http://www.querydsl.com/), đó chính xác là những gì bạn có thể đã sử dụng. –

Trả lời

0

Không, đây hiện chưa được hỗ trợ. Nếu nó đã có sẽ có nguy cơ mơ hồ. Có thể có trường hợp url đến có thể khớp với nhiều hơn 1 @RestResource.

Để giải thích từ một điểm Java của quan điểm cho phép nói rằng chúng ta thể xác định hai phương pháp:

getPerson(String firstName, int age); 

getPerson(String firstName, {Optional} int age, int phoneNumber); 

Sẽ có vấn đề khi ai đó đang hướng tới để gọi phương pháp thứ hai, không cung cấp độ tuổi nhưng được ánh xạ tới phương pháp đầu tiên với số điện thoại được đọc dưới dạng tuổi.

+0

Làm thế nào đến có nguy cơ mơ hồ? Các tham số có tên (duy nhất). – Nefreo

+0

Bạn có cung cấp tên tham số trong yêu cầu không? – UserF40

+2

OP nói rằng anh ta muốn một cái gì đó dọc theo các dòng của 'http: // localhost: 8080/foo/search/driverAndSpan {? Id, * start, * end, page, size, sort}'. Trong trường hợp này, các tham số được cung cấp theo tên nên không có chỗ cho sự mơ hồ. – Nefreo

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