java - 具有多种类型的 REST PathParam

标签 java rest jersey

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

我希望能够根据项目的 idname 进行访问。

假设我有一个记录

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/

相关文章:

java - 如何从数组列表创建数组

Java:正确处理管道作为标准输入

java - 自动生成改造类型

java - Spring MVC @RequestBody 接收具有非原始属性的对象包装器

java - 如何在java中从Jersey模拟requestContext.getUriInfo().getPathParameters()

java - restful api一直处于pending状态,tomcat出现异常

java - 如何从命令提示符运行 Maven 项目 testng.xml

rest - 如何在 angular.service 调用中捕获 401(或其他状态错误)?

Jersey ,内容 gzip/deflate

java - 来自多个 persistenceUnit 的实体上的 JPA 级联