我们正在使用 RESTful Web Services(Jersey)进行Java上的API调用。虽然API需要可选参数,但我们的目的是:
api-interface/user/userid/9000/companyid/90909/{optionalparameter*}
我们必须在没有可选参数时调用此api:
api-interface/user/userid/9000/companyid/90909/
需要的是:
案例:1如果存在可选参数
api-interface/user/userid/9000/companyid/90909/name/john/address/MA/age/34
案例:2如果可选参数不存在。
api-interface/user/userid/9000/companyid/90909
我目前的实施是:
@GET
@Path("user/companyid/{companyid}/userid/{userid}/{optionalparameter:.*}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserList(@PathParam("companyid") String companyId, @PathParam("userid") String userId,
@PathParam("optionalparameter") String syncDate) throws BadRequestException, InternalServerException {
//parsing the param.
}
在上面的代码中,我需要添加尾随“/”但我正在寻找删除这个尾随“/”的方法,如果有人不想传递这些参数。
我遵循了这个link,但是当前面的参数长度超过1时它没有用。
请,建议我最好的方式。
答案 0 :(得分:2)
看your reference,你试过这个:
@Path("userid/{userid}/companyid/{companyid}{optparam:(/[^/]+?)*}")
public Response getLocation(
@PathParam("userid") int userid,
@PathParam("companyid") int companyid,
@PathParam("optparam") String optparam) {
String[] params = parseParams(optparam);
...
}
private String[] parseParams(String params) {
if (params.startsWith("/")) {
params = path.substring(1);
}
return params.split("/");
}
这应该有效,在一个数组中提供所有参数。
编辑:我已更新搜索字符串并在本地安装中验证。