Jersey JAX-RS использование @Path

Чтобы связать 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";
}
Jersey JAX-RS @Path
Jersey JAX-RS @Path

Использование аннотации @Path("/nested") позволяет уточнить адрес:

@GET
@Path("/nested")
public String nestedPath() {
  return "Nested path";
}
Jersey JAX-RS Nested
Jersey JAX-RS Nested

В аннотации @Path можно указывать параметры в фигурных скобках: {param} и в дальнейшем их получать как параметры метода:

@GET
@Path("/param/{name}")
public String withParameter(
    @PathParam("name") String name) {
  
  return "With name parameter " + name;
}
Jersey JAX-RS Параметры
Jersey JAX-RS Параметры

В качестве параметра можно указывать и регулярные выражения, тогда метод будет вызван, только если параметры запроса подходят под регулярное выражение:

@GET
@Path("/param/{id: \\d+}") // только цифры
public String parameterIsDigit(
    @PathParam("id") String id) {
  
  return "With digital parameter " + id;
}
Jersey JAX-RS Регулярное выражение
Jersey JAX-RS Регулярное выражение