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
и передать это надежно в поток?