HttpServletRequest возвращает нулевое значение с @Async Spring - PullRequest
0 голосов
/ 11 февраля 2019

Я хотел бы извлечь URI входящего запроса.

У меня есть следующий код в моем приложении - @RequestMapping, который @Async.Я хотел бы извлечь URI пути через request.getRequestURI(), но он возвращает null, когда присутствует аннотация @Async, в противном случае, если это не так, вывод будет таким, как нужно.Это предполагаемое поведение, если так, то почему?И как я могу получить такой же вывод с @Async?Удаление @Async не является легким вариантом для меня, поскольку я хотел бы использовать его для повышения производительности.

@Async
@RequestMapping("{name}/**")
@ResponseBody
public void incomingRequest(
        @PathVariable("name") String name,
        HttpMethod method,
        HttpServletRequest request,
        HttpServletResponse response)
{
    String URI = request.getRequestURI(); // <-- null with @Async
}

Кажется, что в целом все параметры, относящиеся к запросу, теряются, а это не то, чего я хочу;Мне нужно извлечь их для моей программы.

1 Ответ

0 голосов
/ 11 февраля 2019

Ближайшая подсказка к причине пустого HttpServletRequest Я мог найти комментарий к ответу на этот пост: Что такое жизнь объекта HttpServletRequest?

Чтобы решить вашу проблемуздесь вы можете попробовать 2 подхода:

  1. Поскольку ваш метод void, вы можете вручную запустить новый поток из метода incomingRequest, используя, например, CompletableFuture .

  2. Или попробуйте вернуть CompletableFuture из вашего метода, например так:

@Async
@RequestMapping("{name}/**")
@ResponseBody
public CompletableFuture<Void> incomingRequest(
        @PathVariable("name") String name,
        HttpMethod method,
        HttpServletRequest request,
        HttpServletResponse response)
{
    String URI = request.getRequestURI(); // should get the right non null path
    return CompletableFuture.completedFuture(null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...