如何在RESTFUL Web服务中传递NULL值以获取GET方法



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中维持。

相关内容

  • 没有找到相关文章

最新更新