如何创建带有可选参数的 REST API?

新手上路,请多包涵

我需要使用这些路径参数实现一个 API。

 @Path("/job/{param1}/{optional1}/{optional2}/{param2}")

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

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

 @Path("/job/{param1}/{param2}/{optional1}/{optional2}")

如何提供可选参数?

原文由 mbgsuirp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 655
2 个回答

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

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

现在路径变量包含 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
}

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

原文由 Emdadul Sawon 发布,翻译遵循 CC BY-SA 4.0 许可协议

将可选路径参数转换为查询参数可能更容易。然后,如果需要,您可以使用 @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) {
  ...
}

然后您可以使用 /job/one/two?optional1=test 调用它,只传递您需要的可选参数。

原文由 Jorn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题