RIT*_*AVI 4 java rest resteasy
我有一个 Rest 端点类,如下所示:
@Path("/sports")
public interface SportsEndpoint {
@GET
List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName);
@GET
List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName, @QueryParam("country") String country);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我有两种GET方法几乎具有相同的签名,但第二种方法需要额外的QueryParam.
我尝试使用 url 访问这些端点:
http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton
http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton&country=japan
这两个 url 都解析为使用第一个方法签名。理想情况下,我期望对于第一个 url,将调用第一个方法签名,而对于第二个 url,将调用第二个方法(具有 3 个查询参数的方法)。
但看起来在这两种情况下,第一种方法都被调用了。
我知道 Rest 资源由路径而不是查询参数唯一标识。但是,即使查询参数的数量不同,其余端点也不会被唯一标识,这也是真的吗?
有人可以指出我在设计rest api端点时可以理解多态性的一些规范/文章/文档吗?
仅供参考:我正在使用 RestEasy。
据我所知,Java rest API 是 Jax-Rs 的实现,因此您可以阅读Jax-Rs 规范,
Jax-Rs 将路径映射到资源方法。资源方法必须有唯一的路径。查询参数不被视为路径的一部分。资源方法是用请求方法指示符注释的资源类的方法。当两个方法共享相同的指示符和路径时,规范并没有决定会发生什么,但是大多数实现将只使用其中之一并且不会报告错误。
(符合URL 规范。)
这意味着您不能使用重载。
允许继承。来自 Jax-Rs 规范:
JAX-RS 注释可以用于超类或已实现接口的方法和方法参数。此类注释由相应的子类或实现类方法继承,前提是该方法及其参数本身没有任何 JAX-RS 注释。超类上的注解优先于已实现接口上的注解。如果子类或实现方法有任何 JAX-RS 注释,则忽略超类或接口方法上的所有注释。例如:
| 归档时间: |
|
| 查看次数: |
3024 次 |
| 最近记录: |