Resteasy可以查看JAX-RS方法的参数类型吗?

我们使用Resteasy 3.0.9作为我们的JAX-RS Web服务,最近切换到3.0.19,我们开始看到很多RESTEASY002142: Multiple resource methods match request警告。

例如,我们有以下方法:

 @Path("/{id}") public String getSome(UUID id) @Path("/{id}") public String getSome(int id) 

我不确定它在3.0.9中是如何工作的,可能,我们非常幸运,因为Resteasy似乎从所有候选人中选择了第一种方法(以及3.0.19种候选方法)。

一种解决方案是明确指定正则表达式: @Path("/{id : [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}}")

但有没有办法以某种方式告诉Resteasy查看方法参数并自动构造适当的正则表达式?

据我所知,RESTEasy在匹配请求时不会考虑方法参数类型。 根据JSR-339 (RESTEasy实现),这是请求匹配过程的工作方式:

通过将规范化的请求URI,任何请求实体的媒体类型和所请求的响应实体格式与资源类及其方法上的元数据注释进行比较,将请求与相应的资源方法或子资源方法进行匹配。 如果找不到匹配的资源方法或子资源方法,则返回适当的错误响应。 […]

JAX-RS实现必须将请求的URI与@Path注释值匹配。 在@Path注释值中,您可以定义变量,用大括号( {} )表示。

作为请求匹配的一部分,如果未指定正则表达式 ,则JAX-RS实现将使用指定的正则表达式替换每个URI模板变量或([ˆ/]+?)

要解决您在问题中提到的情况,您应该指定一个正则表达式来匹配一个资源方法上的UUID:

 @Path("{id : [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}}") 

您还可以考虑使用正则表达式来匹配其他资源方法上的整数:

 @Path("{id : \\d+}")