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中,我已将URL模式指定为/rest/*,在RestServicePathParamJava4s.java中,我们将类级别的@Path指定为/customers,将方法级别的@Path指定为{name}/{country}
所以最终的URL应该是
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的方式来接受它。如果有人知道这个请帮助我。如果有人知道MultivaluedMap是什么,给我举个简单的例子吗?

最佳答案

您需要将正则表达式用于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

07-27 13:21