我目前使用 CXF 公开了 RESTFul 网络服务。方法看起来像这样。
@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}
请求没有在服务器端Web服务上点击。
实施例
http://server.com:8080/UserService/getProfile/1001//1
注意:我正在使用SOAPUi
进行测试,并且没有给出userId
值,我在SOAPUI
上看到了以下响应,而请求没有到达服务器。
SOAPUI响应
<data contentType="null" contentLength="0"><![CDATA[]]></data>
答案 0 :(得分:7)
变量的默认匹配是[^/]+?
(至少一个字符),您可以手动将匹配设置为[^/]*?
,它也应匹配空字符串。
只需将格式添加到userid变量:
@Path("/getProfile/{memberno}/{userid: [^/]*?}/{channelid}")
答案 1 :(得分:1)
请更改@Path("/getProfile/{memberno}/{userid}/{channelid}")
@Path("/getProfile/{memberno}/{userid = default}/{channelid}")
以便它接受用户ID的空值。您可以使用Uri模板指定可选参数的默认值。请参阅
答案 2 :(得分:0)
我通过Work Around解决了这个问题。我创建了另一个只带两个参数的方法。现在基于请求URL,不同的方法称为
答案 3 :(得分:0)
@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&&3
您会看到:
1null3
答案 4 :(得分:0)
您可以使用URL编码,并传递%00
。请参阅this。
示例:http://server.com:8080/UserService/getProfile/1001/%00/1
答案 5 :(得分:0)
需要更详细地描述所有可能的情况。看一下基于Spring框架的示例:
@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,则还可以在声明= default
中使用= null
的值。