2011-05-12 38 views
5

Tôi đã thiết lập dịch vụ REST để truy cập thông tin được lưu trữ trong cơ sở dữ liệu.REST PathParam với nhiều loại

Tôi muốn có thể truy cập dựa trên một trong các mục id hoặc name.

Vì vậy, cho phép nói rằng tôi đã có một kỷ lục

name | id | description 
mine | 65 | "my thing" 

Tôi muốn để có thể truy cập mục này thông qua một trong hai:

myurl.com/items/65 
myurl.com/items/mine 

Tôi đang sử dụng Jersey (thư viện Java) . Có cách nào tôi có thể xác định PathParam chấp nhận hoặc int hoặc một chuỗi WITHOUT bằng cách sử dụng object.typeOf()?

Tôi muốn tránh điều này:

@PATH("/items/{identifier} 
@GET 
public String getItem(@PathParam("identifier") Object identifier){ 
    if(identifier.typeOf().equals(String.typeOf())).... 

}

Cảm ơn

+0

Bạn có nghĩa là '.class' thay vì' .typeOf() '? – Jeremy

+0

Tôi chỉ tự do tạo thành bit typeOf(). Câu trả lời của Mike dưới đây cho thấy cú pháp Java chính xác cho điều đó. Tốt bắt mặc dù. Cảm ơn! –

+0

Jochen đã đề cập đến điều này dưới đây nhưng nó đáng chú ý: Toàn bộ kế hoạch này là doomed thất bại nếu nó có thể sử dụng "4711" như một tên. Vì vậy, hãy chắc chắn rằng không thể xảy ra! :) – MatrixFrog

Trả lời

4

Nếu bạn đang tìm kiếm một giải pháp "sạch" - Tôi không nghĩ rằng có một. Nhưng bạn có thể làm điều này:

@PATH("/items/{identifier}") 
public String getItem(@PathParam("identifier") String identifier){ 
    try { 
     return getByID(Long.parseLong(identifier)); 
    } catch (NumberFormatException ex) { 
     return getByName(identifier); 
    } 
} 

Ngoài ra, điều này sẽ không biên dịch - không có phương pháp như typeOf():

if(identifier.typeOf().equals(String.typeOf())) 

Tôi nghĩ bạn có nghĩa là:

if (identifier instanceof String) 

EDIT: Và dù sao, ý tưởng ban đầu của bạn (đặt loại thông số thành Object, sau đó kiểm tra loại trường hợp chính xác) sẽ không hoạt động; vùng chứa không có cách nào để biết rằng phần tử đường dẫn có thể là một số nguyên, do đó, nó sẽ không cố phân tích cú pháp dưới dạng số nguyên, và nó sẽ chỉ cung cấp cho bạn String mỗi lần.

+0

+1 sử dụng chuỗi và phân tích cú pháp một thời gian dài nếu cần thiết là cách làm sạch nhất. – fmucar

+0

Ý tưởng tuyệt vời về việc cố gắng phân tích cú pháp 'Long'. Cảm ơn! –

+3

Trừ khi ai đó đến và đặt tên một mục 4711 ... –

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