Java 具有多种类型的REST PathParam

Java 具有多种类型的REST PathParam,java,rest,jersey,Java,Rest,Jersey,我已经设置了一个REST服务来访问存储在数据库中的信息 我希望能够基于项目的id或名称进行访问 假设我有记录 name | id | description mine | 65 | "my thing" 我希望能够通过以下任一方式访问此项目: myurl.com/items/65 myurl.com/items/mine 我正在使用Jersey(Java库)。有没有一种方法可以定义PathParam来接受int或String而不使用object.typeOf() 我想避免这种情况: @PAT

我已经设置了一个REST服务来访问存储在数据库中的信息

我希望能够基于项目的
id
名称进行访问

假设我有记录

name | id | description
mine | 65 | "my thing"
我希望能够通过以下任一方式访问此项目:

myurl.com/items/65
myurl.com/items/mine
我正在使用Jersey(Java库)。有没有一种方法可以定义PathParam来接受int或String而不使用object.typeOf()

我想避免这种情况:

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

如果您正在寻找一种“干净”的解决方案,请多谢,我想没有。但你可以这样做:

@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 instanceof String) 


编辑:无论如何,您最初的想法(将参数类型设置为
对象
,然后检查确切的实例类型)是行不通的;容器无法知道path元素可能是一个整数,因此它不会尝试将其解析为整数,每次它都会给您一个
字符串

您的意思是
.class
而不是
.typeOf()
?我只是随意生成typeOf()位。下面Mike的回答显示了正确的Java语法。不过这是个好主意。谢谢Jochen在下面提到了这一点,但值得强调的是:如果可能使用“4711”作为名称,整个计划注定要失败。所以要确保这不会发生!:)+1使用字符串并在需要时解析long是最干净的方法。尝试解析
long
是个好主意。谢谢
if (identifier instanceof String)