jersey @PathParam: cara meneruskan variabel yang berisi lebih dari satu garis miring

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();

    }
}

Di web.xml saya telah menentukan pola URL sebagai /rest/* dan di RestServicePathParamJava4s.java kami menetapkan tingkat kelas @Path sebagai /customers dan tingkat metode @Path sebagai {name}/{country}

Jadi URL finalnya seharusnya

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

dan responsnya harus ditampilkan sebagai

Customer name - Java4, Country - USA

Jika saya memberikan 2 masukan yang diberikan di bawah ini, itu menunjukkan kesalahan. Bagaimana cara mengatasi ini?

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

Di sini Java4:kum77./@.com yang ini adalah satu string dan berisi garis miring. bagaimana menerima ini dengan menggunakan @PathParam atau apa pun yang saya perlukan menggunakan MultivaluedMap. Jika seseorang mengetahui ini, tolong bantu saya. jika ada yang tahu apa itu MultivaluedMap, beri saya contoh sederhana?


person Vinay Kumar    schedule 06.04.2015    source sumber
comment
Seperti yang sudah dijawab oleh @peeskillet, ekspresi reguler dapat digunakan. Hal ini juga disebutkan dalam spesifikasi JAX-RS itu sendiri (Bagian 3.4 Templat URI)   -  person Abhishek    schedule 07.04.2015


Jawaban (1)


Anda harus menggunakan regex untuk ekspresi jalur name

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

Ini akan memungkinkan apa pun berada di templat name, dan segmen terakhir adalah country.

Tes

@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 apa perbedaan .* dengan .+ , seperti yang disebutkan dalam jawaban ini - person bytesandcaffeine; 30.11.2018
comment
@Shamil dalam sebagian besar bahasa, inilah jawabannya. Ini terkait dengan regex. - person Paul Samsotha; 01.12.2018