Salvage UriInfo для использования вне рамок запроса

У меня есть простой сервис REST для поиска записей книг в базе данных:

@Path("/search")
public class MySearchResource {

    @Context
    UriInfo requestUri;

    Database db;

    @GET
    @Path("/books")
    @Produces(MediaType.APPLICATION_JSON)
    public Stream<JsonHrefItem> searchBooks(
            @QueryParam("keyword") String keyword
    ) {

        return db.lookupBooks(keyword)
                .map(Map.Entry::getValue)
                .map(book -> new JsonHrefItem(book.title(), bookUrl(requestUri, book)));
    }
}

Возвращающийся поток генерирует поток конечных точек HTTP, которые указывают на каждую книгу, которая соответствует данному ключевому слову. Когда я вызываю этот метод из HTTP-клиента, я получаю следующее исключение:

java.lang.IllegalStateException: Not inside a request scope.

Когда я заменяю введенный UriInfo со статическим макетом исключение исчезает. Кажется, что requestUri доступен в контексте searchBooks() но не доступно для map() операция в созданном потоке (которая может выполняться в другом потоке).

Как я могу спасти динамику UriInfo и передать это надежно в поток?

0 ответов

Другие вопросы по тегам