Подтвердить что ты не робот

@Autowired HttpServletResponse

Я ищу способ autwire HttpServletResponse. Он не работает с spring из коробки, но я нашел это описание. Это работает, но довольно раздражает, поскольку spring, очевидно, имеет механизм, чтобы сделать запрос объектов облачным (т.е. HttpServletRequest), и это кажется взломанным сверху.

Есть ли способ подключиться к тому же механизму, который spring использует для HttpServletRequest? И любая идея, почему команда spring решила сделать только HttpServletRequest autowire способную (и исключенная HttpServletResponse)?

4b9b3361

Ответ 1

Возможно, есть некоторое обходное решение, но это не так очевидно, потому что это не так, как должно было быть. Spring MVC должен иметь singleton @Controller beans, который предоставляет методы @RequestMapping, которые принимают запрос и ответ в качестве аргументов.

Если вам нужен ответ в другом месте (уровень сервиса) - не делайте этого. Ответ не должен выходить за пределы уровня сети (контроллера).

Чтобы ввести ответ, вам необходимо: - сохранить ответ в ThreadLocal - создать factory bean, который возвращает текущий ответ

О пример кода, который вы показали - Я не уверен, что вам не понадобится factory bean, чтобы вернуться прокси (реализация HttpServletResponse), который, в свою очередь, возвращает текущий ответ. И это становится довольно сложным.

Но в конечном счете - вы не должны этого делать. Если вам нужно перехватить вызовы нескольких контроллеров, используйте mvc-перехватчик. Если вам действительно нужно использовать аспект, вы можете получить ответ, если он передан как аргумент перехваченному методу.

Ответ 2

Можно ли просто включить запрос в дескриптор метода?

@RequestMapping(method=Method.GET, value="myUrl")
public String doGet(HttpServletResponse response){//spring will put the response in for you
  ... 
}