如何使用可选参数创建 REST API?
How to create REST API with optional parameters?
我需要使用这些路径参数实现 API。
@Path("/job/{param1}/{optional1}/{optional2}/{param2}")
第二个和第三个参数可以是可选的吗?所以客户端不需要传递这些,但必须传递第一个和最后一个。
如果这不可能,那么是否建议以这种方式重新排列参数?
@Path("/job/{param1}/{param2}/{optional1}/{optional2}")
如何提供可选参数?
您可以匹配以 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
}
现在如果你格式化和编码将是可选的。你不给任何值它们将是空的。
重新排列参数并尝试以下操作:
@Path("/job/{param1}/{param2}{optional1 : (/optional1)?}{optional2 : (/optional2)?}")
public Response myMethod(@PathParam("param1") String param1,
@PathParam("param2") String param2,
@PathParam("optional1") String optional1,
@PathParam("optional2") String optional2) {
...
}
将可选路径参数转换为查询参数可能更容易。如果需要,您可以使用 @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
仅传递您需要的可选参数来调用它。
使请求参数可选,在控制器中将 @requestparam
设置为 false class
(@RequestParam(required=false)
我需要使用这些路径参数实现 API。
@Path("/job/{param1}/{optional1}/{optional2}/{param2}")
第二个和第三个参数可以是可选的吗?所以客户端不需要传递这些,但必须传递第一个和最后一个。
如果这不可能,那么是否建议以这种方式重新排列参数?
@Path("/job/{param1}/{param2}/{optional1}/{optional2}")
如何提供可选参数?
您可以匹配以 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
}
现在如果你格式化和编码将是可选的。你不给任何值它们将是空的。
重新排列参数并尝试以下操作:
@Path("/job/{param1}/{param2}{optional1 : (/optional1)?}{optional2 : (/optional2)?}")
public Response myMethod(@PathParam("param1") String param1,
@PathParam("param2") String param2,
@PathParam("optional1") String optional1,
@PathParam("optional2") String optional2) {
...
}
将可选路径参数转换为查询参数可能更容易。如果需要,您可以使用 @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
仅传递您需要的可选参数来调用它。
使请求参数可选,在控制器中将 @requestparam
设置为 false class
(@RequestParam(required=false)