Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Условные HTTP-запросы

JAX-RS обеспечивает поддержку условных HTTP-запросов GET и PUT. Условные запросы GET помогают понизить требования к пропускной способности за счёт повышения эффективности обработки клиентских запросов.

Запрос GET может вернуть ответ 304 (Not Modified), если представление не изменилось со времени предыдущего запроса. Например, веб-сайт может вернуть ответы 304 для всех своих статических изображений, которые не изменились со времени предыдущего запроса.

Запрос PUT может вернуть ответ 412 (Precondition Failed), если представление было изменено с момента последнего запроса. Условный PUT поможет избежать проблемы потерянного обновления.

Условные HTTP-запросы могут использоваться с заголовками Last-Modified и ETag. Заголовок Last-Modified может представлять дату с детализацией в одну секунду.

@Path("/employee/{joiningdate}")
public class Employee {

    Date joiningdate;

    @GET
    @Produces("application/xml")
    public Employee(@PathParam("joiningdate") Date joiningdate,
                    @Context Request req,
                    @Context UriInfo ui) {

        this.joiningdate = joiningdate;
        ...
        this.tag = computeEntityTag(ui.getRequestUri());
        if (req.getMethod().equals("GET")) {
            Response.ResponseBuilder rb = req.evaluatePreconditions(tag);
            if (rb != null) {
                throw new WebApplicationException(rb.build());
            }
        }
    }
}

В этом фрагменте кода конструктор класса Employee вычисляет тег сущности из URI запроса и вызывает метод request.evaluatePreconditions с этим тегом. Если клиентский запрос возвращает заголовок If-none-match со значением, имеющим тот же тег сущности, который был вычислен, evaluate.Preconditions возвращает предварительно заполненный ответ с кодом состояния 304 и набором тегов сущностей, которые могут быть созданы и возвращены.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)