我已经设置了一个REST服务来访问存储在数据库中的信息.
我希望能够根据项目的ID或名称进行访问.
所以我要说我有一个记录
name | id | description
mine | 65 | "my thing"
我希望能够通过以下任一方式访问此项:
myurl.com/items/65
myurl.com/items/mine
我正在使用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()))....
}
谢谢
解决方法:
如果你正在寻找一个“干净”的解决方案 – 我认为没有.但你可以这样做:
@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.
标签:java,rest,jersey
来源: https://codeday.me/bug/20190521/1148553.html