In JAX-RS können Sie mit @ Path ein URI-Muster an eine Java-Methode binden. Die folgenden Beispiele zeigen Ihnen, wie es funktioniert.
1. Normaler URI-Abgleich
Siehe normale URI-Übereinstimmung mit @Path-Annotation.
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; @Path("/users") public class UserRestService { @GET public Response getUser() { return Response.status(200).entity("getUser is called").build(); } @GET @Path("/vip") public Response getUserVIP() { return Response.status(200).entity("getUserVIP is called").build(); } }
URI-Muster: " /users "
getUser is called
URI-Muster: " /users/vip "
getUserVIP is called
2. URI-Abgleich und Parameter
Der Wert innerhalb einer offenen Klammer "\ {" und einer schließenden Klammer "}" stellt einen Parameter dar und kann mit
@ PathParam
aufgerufen werden.
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/users") public class UserRestService { @GET @Path("{name}") public Response getUserByName(@PathParam("name") String name) { return Response.status(200) .entity("getUserByName is called, name : " + name).build(); } }
URI-Muster: " /users/mkyong "
getUserByName is called, name : mkyong
URI-Muster: " /users/abcdefg "
getUserByName is called, name : abcdefg
3. URI-Abgleich und regulärer Ausdruck
"@ Path" unterstützt den komplexen URI-Abgleich mit regulärem Ausdruck über folgenden Ausdruck:
{" variable-name[":" regular-expression]"}
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/users") public class UserRestService { @GET @Path("{id : \\d+}")//support digit only public Response getUserById(@PathParam("id") String id) { return Response.status(200).entity("getUserById is called, id : " + id).build(); } @GET @Path("/username/{username :[a-zA-Z][a-zA-Z__0-9]}") public Response getUserByUserName(@PathParam("username") String username) { return Response.status(200) .entity("getUserByUserName is called, username : " + username).build(); } @GET @Path("/books/{isbn : \\d+}") public Response getUserBookByISBN(@PathParam("isbn") String isbn) { return Response.status(200) .entity("getUserBookByISBN is called, isbn : " + isbn).build(); } }
URI-Muster: " /users/999 "
getUserById is called, id : 999
URI-Muster: " /users/123456 "
getUserById is called, id : 123456
URI-Muster: " /users/Benutzername/aaa ", fehlgeschlagen, stimmt nicht mit "[a-zA-Z][a-zA-Z 0-9]" überein, erstes Zeichen muss "[a-zA-Z]sein ”, Das zweite Zeichen muss“[a-zA-Z 0-9]”sein.
Could not find resource for relative :/users/username/aaa
URI-Muster: " /users/Benutzername/a9 "
getUserByUserName is called, username : a9
URI-Muster: " Benutzer/Bücher/999 "
getUserBookByISBN is called, isbn : 999
Quellcode herunterladen
Download es - JAX-RS-Path-URI-Matching-Example.zip (6 KB)
Referenzen
@Path in RESTEasy]. http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/Path.html
@Pfad]
Link://Tag/Jax-RS/[Jax-RS]Link://Tag/URI/[URI]