Вы можете использовать класс ресурсов для обработки только части запроса URI. Корневой ресурс может реализовать подресурсы, которые могут обрабатывать оставшуюся часть пути URI.
Метод класса ресурсов, аннотированный с помощью @Path
, является либо методом подресурса, либо указателем подресурса.
Здесь рассматриваются следующие темы:
Методы подресурсов
Метод подресурса обрабатывает HTTP-запрос напрямую. Метод должен быть аннотирован указателем метода запроса, таким как @GET
или @POST
, в дополнение к @Path
. Метод вызывается для URI запроса, который соответствует шаблону URI, созданному путём объединения шаблона URI класса ресурсов с шаблоном URI метода.
В следующем фрагменте кода показано, как метод подресурса можно использовать для извлечения фамилии сотрудника, когда указан адрес электронной почты сотрудника:
@Path("/employeeinfo")
public class EmployeeInfo {
public employeeinfo() {}
@GET
@Path("/employees/{firstname}.{lastname}@{domain}.com")
@Produces("text/xml")
public String getEmployeeLastName(@PathParam("lastname") String lastName) {
...
}
}
Метод getEmployeeLastName
возвращает doe
для следующего запроса GET
:
GET /employeeinfo/employees/john.doe@example.com
Указатели подресурсов
Указатель подресурса возвращает объект, который будет обрабатывать HTTP-запрос. Метод не должен быть аннотирован указателем метода запроса. Вы должны объявить указатель подресурса в классе подресурса, так как только указатели подресурсов используются для разрешения ресурсов времени выполнения.
Следующий фрагмент кода демонстрирует указатель подресурса:
// Корневой класс ресурса
@Path("/employeeinfo")
public class EmployeeInfo {
// Локатор подресурса: получает подресурс Employee
// по пути /employeeinfo/employee/{empid}
@Path("/employees/{empid}")
public Employee getEmployee(@PathParam("empid") String id) {
// Извлечение Employee по имеющемуся в пути параметру id
Employee emp = ...;
...
return emp;
}
}
// Класс подресурса
public class Employee {
// Метод подресурса: возвращает фамилию сотрудника
@GET
@Path("/lastname")
public String getEmployeeLastName() {
...
return lastName;
}
}
В этом фрагменте кода метод getEmployee
является указателем подресурса, предоставляющего объект Employee
, обслуживающий запросы для lastname
.
Если ваш HTTP-запрос GET /employeeinfo/employees/as209/
, метод getEmployee
возвращает объект Employee
с идентификатором as209
. Во время выполнения JAX-RS отправляет запрос GET /employeeinfo/employee/as209/lastname
в метод getEmployeeLastName
. Метод getEmployeeLastName
извлекает и возвращает фамилию сотрудника с идентификатором as209
.