jersey @PathParam:如何传递包含多个斜杠的变量

时间:2015-04-06 13:34:38

标签: java rest jersey jax-rs jersey-client

package com.java4s;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

@Path("/customers")
public class RestServicePathParamJava4s {
    @GET
    @Path("{name}/{country}")
    @Produces("text/html")
    public Response getResultByPassingValue(
                @PathParam("name") String name,
                @PathParam("country") String country) {

        String output = "Customer name - "+name+", Country - "+country+"";
        return Response.status(200).entity(output).build();

    }
}

在web.xml中,我已将网址格式指定为/rest/*,而在RestServicePathParamJava4s.java中我们将类级别@Path指定为/customers,将方法级别@Path指定为{name}/{country} {1}}

所以最终的网址应该是

http://localhost:2013/RestPathParamAnnotationExample/rest/customers/Java4/USA

并且响应应显示为

Customer name - Java4, Country - USA

如果我给出下面给出的2输入,则显示错误。怎么解决这个问题?

http://localhost:2013/RestPathParamAnnotationExample/rest/customers/Java4:kum77./@.com/USA` 

这里Java4:kum77./@.com这个是一个字符串,它包含正斜杠。如何使用@PathParam或我需要使用MultivaluedMap的任何内容来接受此操作。如果有人知道这个PLZ帮助我。如果有人知道什么是MultivaluedMap,给我一个简单的例子?

1 个答案:

答案 0 :(得分:4)

您需要使用正则表达式来表示name路径表达式

@Path("{name: .*}/{country}")

这将允许任何内容位于name模板中,最后一段将是country

测试

@Path("path")
public class PathParamResource {

    @GET
    @Path("{name: .*}/{country}")
    @Produces("text/html")
    public Response getResultByPassingValue(@PathParam("name") String name,
                                            @PathParam("country") String country) {

        String output = "Customer name - " + name + ", Country - " + country + "";
        return Response.status(200).entity(output).build();
    }
}
  

$ curl http://localhost:8080/api/path/Java4:kum77./@.com/USA
  Customer name - Java4:kum77./@.com, Country - USA

     

$ curl http://localhost:8080/api/path/Java4/USA
  Customer name - Java4, Country - USA