【问题标题】:Jax-RS request mapping to operation with @DefaultValue and @QueryParamJax-RS 请求映射到使用 @DefaultValue 和 @QueryParam 的操作
【发布时间】:2018-03-01 17:20:15
【问题描述】:

我想知道在使用@DefaultValue@QueryParam 时,jax-rs(或作为实现的 Jersey)如何将客户端请求映射到实际操作。

假设你在资源中有如下操作,一个返回所有的资源,另一个返回一个自定义视图的所有;

@Path(/v1)
public class MyResource {

    @GET
    @Path(/my-resource)
    public Response getAllResources(){
       ...
    }

    @GET
    @Path(/my-resource)
    public Response getAllResources(@QueryParam("view") @DefaultValue("simple") String view){
       ...
    }
}

在这种情况下,如果我将服务称为/v1/my-resource,映射将如何在内部工作以及选择哪个操作?

如果规范中对此有任何解释,我将不胜感激。

谢谢,

图格塞姆。

【问题讨论】:

  • 使用 Jersey,您将在启动时收到 ModelValidationException 错误,因为这两种方法不明确。应用程序将无法启动。 Jersey 无法根据查询参数(或一般的参数)区分资源方法

标签: java jersey jax-rs restful-url


【解决方案1】:

正如 Paul 正确提到的,对于相同的资源和 Web 方法(以及可接受的媒体类型),您不应该有超过 1 种方法。这对于 JAX-RS 来说是正确的,而不仅仅是一些实现。请参阅 JAX-RS 规范:

3.7.2 请求匹配
...
如果有多个最大元素,则实现 应报告警告并以与实现相关的方式选择其中一种类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多