具有多种类型的REST PathParam

Tyl*_*itt 5 java rest jersey

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

我希望能够根据项目idname.

所以我要说我有一个记录

name | id | description
mine | 65 | "my thing"
Run Code Online (Sandbox Code Playgroud)

我希望能够通过以下任一方式访问此项:

myurl.com/items/65
myurl.com/items/mine
Run Code Online (Sandbox Code Playgroud)

我正在使用Jersey(Java库).有没有办法我可以定义PathParam接受int或String WITHOUT使用object.typeOf()?

我想避免这个:

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

}

谢谢

Mik*_*zak 5

如果你正在寻找一个"干净"的解决方案 - 我认为没有.但你可以这样做:

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

此外,这将无法编译 - 没有这样的方法typeOf():

if(identifier.typeOf().equals(String.typeOf()))
Run Code Online (Sandbox Code Playgroud)

我想你的意思是:

if (identifier instanceof String) 
Run Code Online (Sandbox Code Playgroud)

编辑:无论如何,你最初的想法(设置参数类型Object,然后检查确切的实例类型)将无法正常工作; 容器无法知道path元素可能是一个整数,所以它不会尝试将它解析为整数,它只会String每次都给你一个.