匹配REST中的空路径参数

时间:2013-11-11 15:40:26

标签: java regex rest jersey

我的休息服务看起来像:

@GET
@Path("get-policy/{policyNumber}/{endorsement}/{type}")
@Produces(MediaType.APPLICATION_XML)
public String getPolicyIndividual(
        @PathParam("policyNumber")String policyNumber,
        @PathParam("endorsement")String endorsement,
        @PathParam("type")String type){
          ...
        }

我想知道是否有一种方法可以接受每个参数作为空值,如果它们没有被发送,所以如果somene调用我的服务没有参数或不是所有的参数仍然可以匹配我的服务的定义。 例子:

http://localhost:8080/service/policy/get-policy/

或者这个:

http://localhost:8080/service/policy/get-policy/5568

或者这个:

http://localhost:8080/service/policy/get-policy/5568/4

我很清楚我可以在这个answer中定义一个正则表达式,但是在这种情况下只定义了一个路径参数,如果我有多个路径参数会怎样?

这对我没有用,但也许我做错了什么,我尝试了这个没有成功:

@GET
@Path("get-policy/{policyNumber: .*}/{endorsement: .*}/{type: .*}")
@Produces(MediaType.APPLICATION_XML)
public String getPolicyIndividual(
        @PathParam("policyNumber")String policyNumber,
        @PathParam("endorsement")String endorsement,
        @PathParam("type")String type){
          ...
        }

是通过POST实现这一目标的唯一方法吗?我用泽西岛btw!

1 个答案:

答案 0 :(得分:1)

您必须为此创建一个完整的用例场景,并且如果您不想多次编写代码,则每次调用一般方法。 说:对于一个实例,只使用一个参数传递,然后是2然后全部,没有

      @GET
      @Path("get-policy/{policyNumber: .*}")
      @Produces(MediaType.APPLICATION_XML)
      public String getPolicyIndividual(
        @PathParam("policyNumber")String policyNumber)
        {
          doSomething(policyNumber, "", "");
        }

    @GET
    @Path("get-policy/{policyNumber: .*}/{endorsement: .*}")
    @Produces(MediaType.APPLICATION_XML)
    public String getPolicyIndividual(
            @PathParam("policyNumber")String policyNumber, 
            @PathParam("endorsement")String endorsement)
            {
              doSomething(policyNumber,endorsement, "");
            }