jersey @PathParam: как передать переменную, содержащую более одной косой черты

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, приведите простой пример?


person Vinay Kumar    schedule 06.04.2015    source источник
comment
Как уже ответил @peeskillet, можно использовать регулярные выражения. Это также упоминается в самой спецификации JAX-RS (раздел 3.4). шаблоны URI)   -  person Abhishek    schedule 07.04.2015


Ответы (1)


Вам нужно будет использовать регулярное выражение для выражения пути 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

person Paul Samsotha    schedule 06.04.2015
comment
@paul-samsotha чем .* отличается от .+ , как указано в этом ответе - person bytesandcaffeine; 30.11.2018
comment
@Shamil на большинстве языков это ответ. Это связано с регулярным выражением. - person Paul Samsotha; 01.12.2018