如何使用可选参数创建REST API?

mbg*_*irp 11 java rest jax-rs

我需要使用这些路径参数实现API.

@Path("/job/{param1}/{optional1}/{optional2}/{param2}")
Run Code Online (Sandbox Code Playgroud)

第二和第三个参数可以选择吗?所以客户端不需要传递这些,但必须传递第一个和最后一个.

如果这是不可能的,那么建议以这种方式重新排列参数吗?

@Path("/job/{param1}/{param2}/{optional1}/{optional2}")
Run Code Online (Sandbox Code Playgroud)

如何提供可选的参数?

Jor*_*orn 17

将可选路径参数转换为查询参数可能更容易.然后,@DefaultValue如果需要,您可以使用它:

@GET @Path("/job/{param1}/{param2}")
public Response method(@PathParam("param1") String param1,
    @PathParam("param2") String param2,
    @QueryParam("optional1") String optional1,
    @QueryParam("optional2") @DefaultValue("default") String optional2) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用/job/one/two?optional1=test仅传递所需的可选参数来调用它.


Emd*_*won 5

您可以匹配以 REST 请求结尾的整个路径

@Path("/location/{locationId}{path:.*}")
public Response getLocation(
    @PathParam("locationId") int locationId,
    @PathParam("path") String path) {
    //your code
}
Run Code Online (Sandbox Code Playgroud)

现在路径变量包含整个路径 location/{locationId}

您还可以使用正则表达式使路径可选。

@Path("/user/{id}{format:(/format/[^/]+?)?}{encoding:(/encoding/[^/]+?)?}")
public Response getUser(
    @PathParam("id") int id,
    @PathParam("format") String format,
    @PathParam("encoding") String encoding) {
    //your code
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您格式化和编码将是可选的。你不给任何值它们就会是空的。

  • 介意提到来源吗?http://www.nakov.com/blog/2009/07/15/jax-rs-path-pathparam-and-optional-parameters/ (8认同)