2011-05-12 10 views
5

Mam usługę usługi REST, aby uzyskać dostęp do informacji przechowywanych w bazie danych.REST PathParam z wieloma typami

Chciałbym móc uzyskać dostęp na podstawie elementu id lub name.

Więc powiedzmy, że mam rekord

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

Chciałbym być w stanie uzyskać dostęp do tego elementu przez albo:

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

Używam Jersey (biblioteki Java) . Czy istnieje sposób, w jaki można zdefiniować PathParam, aby zaakceptować int lub String BEO using object.typeOf()?

Chciałbym tego uniknąć:

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

}

Dzięki

+0

Masz na myśli '.class' zamiast' .typeOf() '? – Jeremy

+0

Byłem po prostu wolny tworząc bit typeOf(). Odpowiedź Mike'a poniżej pokazuje poprawną składnię Javy. Ale dobry połów. Dzięki! –

+0

Jochen wspomniał o tym poniżej, ale warto podkreślić: cały ten system jest skazany na niepowodzenie, jeśli można użyć nazwy "4711". Upewnij się więc, że to się nie wydarzy! :) – MatrixFrog

Odpowiedz

4

Jeśli szukasz rozwiązania "czystej" - nie sądzę, że jest jeden. Ale można to zrobić:

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

Ponadto, nie będzie to skompilować - nie ma takich metod jak typeOf():

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

Chyba masz na myśli:

if (identifier instanceof String) 

EDIT: I tak, twój oryginalny pomysł (ustawienie parametru na Object, a następnie sprawdzenie dokładnego typu instancji) nie będzie działać; Kontener nie może wiedzieć, że element ścieżki może być liczbą całkowitą, więc nie będzie próbował go sparsować jako liczby całkowitej, a za każdym razem da mu się String.

+0

+1 za pomocą ciągu znaków i parsowanie długich w razie potrzeby jest najczystszym sposobem robienia tego. – fmucar

+0

Świetny pomysł na próbę przeanalizowania 'Long'. Dzięki! –

+3

O ile ktoś nie przyjdzie i nie wymieni przedmiotu 4711 ... –

Powiązane problemy