i当前有使用 cxf 的 RESTFUL Web服务。该方法看起来像这样。
@GET
@Path("/getProfile/{memberno}/{userid}/{channelid}")
@Consumes("application/xml")
public MaintainCustomerProductResponse getUserDetails(
@PathParam("memberno") String membernumber,
@PathParam("userid") String userid,
@PathParam("channelid") String channelid){
//DO Some Logic here.
}
可以通过以下URL&在提交有效数据时,我会得到响应。
http://server.com:8080/UserService/getProfile/{memberno}/{userid}/{channelid}
问题:如何通过userid
传递空值?
如果我简单地忽略了{userId}
,请求不在服务器端网络服务上。
示例
http://server.com:8080/UserService/getProfile/1001//1
注意:我正在使用SOAPUi
进行测试,而没有给出userId
值,我在SOAPUI
上看到以下响应,请求不会触及服务器。
soapui响应
<data contentType="null" contentLength="0"><![CDATA[]]></data>
变量的默认匹配是 [^/]+?
(至少一个字符),您可以手动将匹配设置为 [^/]*?
,并且也应该匹配空字符串。
只需将格式添加到UserId变量:
@Path("/getProfile/{memberno}/{userid: [^/]*?}/{channelid}")
请更改@Path("/getProfile/{memberno}/{userid}/{channelid}")
@Path("/getProfile/{memberno}/{userid = default}/{channelid}")
,以便将无效值接受为用户ID。您可以使用URI模板为可选参数指定默认值。请参考
http://msdn.microsoft.com/en-us/library/bb675245.aspx
我通过工作解决了它。我创建了另一种仅采用两个参数的方法。现在,基于请求URL,不同的方法称为
您可以使用URL编码,通过%00
。请参阅此。
示例:http://server.com:8080/UserService/getProfile/1001/%00/1
@GET
@Path("qwer/{z}&{x:.*?}&{c}")
@Produces(MediaType.TEXT_PLAIN)
public String withNullableX(
@PathParam("z") Integer z,
@PathParam("x") Integer x,
@PathParam("c") Integer c
) {
return z + "" + x + "" + c;
}
当您致电
时http://localhost:8080/asdf/qwer/1&amp; 3
您会看到:
1null3
需要更详细的描述所有情况,这是可能的。根据春季框架查看Exapmple:
@RestController
@RequestMapping("/misc")
public class MiscRestController {
...
@RequestMapping(value = { "/getevidencecounts/{userId}",
"/getevidencecounts/{userId}/{utvarVSId = default}" }, method = RequestMethod.GET)
public ResponseEntity<EvidenceDokumentuCountTO> getEvidenceCounts(
@PathVariable(value = "userId", required = true) Long userId,
@PathVariable(value = "utvarVSId", required = false) Long utvarVSId) {
...
我们需要使用.../misc/1
(1),.../misc/1/25
(2),.../misc/1/null
(3)等路径。路径1表示/getevidencecounts/{userId}
。路径2和3 /getevidencecounts/{userId}/{utvarVSId = default}
。如果确定,该默认值为null,您也可以通过= null
value在声明= default
中维持。