我已经设置了一个 REST 服务来访问存储在数据库中的信息。
我希望能够根据项目的 id
或 name
进行访问。
假设我有一个记录
name | id | description
mine | 65 | "my thing"
我希望能够通过以下任一方式访问此项目:
myurl.com/items/65
myurl.com/items/mine
我正在使用 Jersey(Java 库)。有没有一种方法可以定义 PathParam 以在不使用 object.typeOf() 的情况下接受 int 或 String?
我想避免这种情况:
@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.typeOf().equals(String.typeOf()))
我想你的意思是:
if (identifier instanceof String)
编辑:无论如何,您最初的想法(将参数类型设置为Object
,然后检查确切的实例类型)是行不通的;容器无法知道路径元素可能是一个整数,因此它不会尝试将其解析为一个整数,它只会每次给你一个 String
。
关于java - 具有多种类型的 REST PathParam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982906/