Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用可选参数创建RESTAPI?_Java_Rest_Jax Rs - Fatal编程技术网

Java 如何使用可选参数创建RESTAPI?

Java 如何使用可选参数创建RESTAPI?,java,rest,jax-rs,Java,Rest,Jax Rs,我需要用这些路径参数实现一个API @Path("/job/{param1}/{optional1}/{optional2}/{param2}") 第二个和第三个参数是否可以选择?因此,客户机不需要通过这些,但必须通过第一个和最后一个 如果这是不可能的,那么是否建议以这种方式重新排列参数 @Path("/job/{param1}/{param2}/{optional1}/{optional2}") 如何提供可选参数?您可以匹配以REST请求结尾的整个路径 @Path("/locat

我需要用这些路径参数实现一个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
}
现在,path变量在
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调用它,只传递您需要的可选参数。

最好重新排列参数,如果我有选择的话,我会将强制和可选分为两部分,在URL中用分隔符分隔,然后将强制设置为位置,将可选设置为键值对,我不知道怎么写,哪个客户机,在什么情况下编写代码,到目前为止您尝试了什么?@abasu我正在使用JAX-RS。我提到过。是否需要使用正则表达式,或者是否有其他方法?您如何区分
/job/foo/bar/baz
中的
optional1
optional2
?什么是
bar
?我可以使用www.nakov.com/blog/2009/07/15/jax-rs-path-pathparam-and-optional-parameters中提供的解决方案提供可选参数。所以我的问题现在解决了。介意提一下来源吗?但是如果条件参数为空,如何将此参数传递给sql语句