REST PathParam с несколькими типами - PullRequest
5 голосов
/ 12 мая 2011

У меня настроена служба REST для доступа к информации, хранящейся в базе данных.

Я бы хотел иметь возможность доступа на основе id или name. * 1005 элемента.*

Допустим, у меня есть запись

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

Я хотел бы получить доступ к этому элементу через:

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

Я использую Джерси(Библиотека Java).Есть ли способ, которым я могу определить PathParam для принятия либо int, либо String БЕЗ object.typeOf ()?

Я бы хотел избежать этого:

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

}

Спасибо

1 Ответ

5 голосов
/ 12 мая 2011

Если вы ищете «чистое» решение - я не думаю, что оно есть. Но вы могли бы сделать это:

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

Кроме того, это не скомпилируется - нет такого метода, как typeOf():

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

Я думаю, вы имели в виду:

if (identifier instanceof String) 

РЕДАКТИРОВАТЬ : В любом случае, ваша первоначальная идея (установка типа параметра на Object, а затем проверка на точный тип экземпляра) не сработает; у контейнера нет возможности узнать, что элемент path может быть целым числом, поэтому он не будет пытаться проанализировать его как целое число, а будет просто выдавать String каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...