【问题标题】:Mapping Querystring Parameters to Resource Methods in JAX-RS在 JAX-RS 中将查询字符串参数映射到资源方法
【发布时间】:2013-07-04 16:08:39
【问题描述】:

Amazon 的 Web API 通过使用查询字符串参数来指定操作,从而将“查询 API”用于非 CRUD 操作。我想以类似的方式实现非 CRUD 操作。

有什么方法可以根据特定查询字符串参数的值使用 Jersey JAX-RS 映射 POST 资源方法?例如我想做这样的事情:

@POST @Query(name="xaction", value="move") 
public Response move(@QueryParam("source") String source, @QueryParam("dest") String dest)
{
...
}

@POST @Query(name="xaction", value="copy")
public Response copy(@QueryParam("source") String source, @QueryParam("dest") String dest)
{
...
}

在上面的示例中,我希望框架会根据“xaction”查询字符串参数的值分派到适当的方法,而不管 URI 路径如何。不幸的是,我没有使用路径或方法来区分这些操作的奢侈。我愿意接受与 JAX-RS 或自定义实现兼容的其他库建议来解决此问题。

【问题讨论】:

    标签: rest jersey jax-rs


    【解决方案1】:

    REST 不是远程过程调用 (RPC)。即使亚马逊发布了这样的 API,它仍然不是 RESTful。

    JAX-RS 不提供您描述的映射是有充分理由的。每个资源必须由包含完整路径和所有查询参数的 URI 唯一标识。您描述的 URI 不识​​别资源,但调用 procedures。

    问自己这些问题:

    1. 您的资源是什么?
    2. Resources 上的操作是否容易映射到 HTTP 动词?
    3. 如果不是,我可以将对资源的操作建模为资源吗?

    作为 3. 的示例,您可以考虑 MoveResource 和 CopyReource。

    MoveResource 的 JSON 表示可能如下所示:

    {
      "source": "/path/to/source",
      "dest": "/path/to/dest"
    }
    

    创建这样的MoveResource 并因此触发移动可以通过POST 到/moves 的集合资源来完成。这个POST 将返回201 Created,并带有Location 标头,例如/moves/42。 GET 到 this 资源可以返回 MoveResource 的状态:

    {
      "source": "/path/to/source",
      "dest": "/path/to/dest",
      "status": "success"
    }
    

    CopyResource 也可以这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2011-07-25
      相关资源
      最近更新 更多