Чтобы связать URL с конкретным методом сервиса используется параметр @Path
. На простых примерах посмотрим в JAX-RS использование @Path.
Опишем простой сервис, доступный по адресу /hello
package ru.mydesignstudio.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @Path("/hello") public class HelloService { @GET public String defaultHandler() { return "Default"; } @GET @Path("/nested") public String nestedPath() { return "Nested path"; } @GET @Path("/param/{name}") public String withParameter( @PathParam("name") String name) { return "With name parameter " + name; } @GET @Path("/param/{id: \\d+}") public String parameterIsDigit( @PathParam("id") String id) { return "With digital parameter " + id; } }
Также объявим сервлет и Jersey в web.xml
:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>jersey-servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>ru.mydesignstudio.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-servlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
Первый метод вызывается, когда обращаемся к сервису без параметров:
@GET public String defaultHandler() { return "Default"; }
Использование аннотации @Path("/nested")
позволяет уточнить адрес:
@GET @Path("/nested") public String nestedPath() { return "Nested path"; }
В аннотации @Path
можно указывать параметры в фигурных скобках: {param}
и в дальнейшем их получать как параметры метода:
@GET @Path("/param/{name}") public String withParameter( @PathParam("name") String name) { return "With name parameter " + name; }
В качестве параметра можно указывать и регулярные выражения, тогда метод будет вызван, только если параметры запроса подходят под регулярное выражение:
@GET @Path("/param/{id: \\d+}") // только цифры public String parameterIsDigit( @PathParam("id") String id) { return "With digital parameter " + id; }