Как мне конструктор-autowire HttpServletResponse в Spring 3.1? - PullRequest
3 голосов
/ 17 января 2012

У меня есть bean-объект в области запроса, и мне нужен доступ к объектам HttpServletResponse и HttpServletRequest.

Мне нужен доступ к этим объектам в конструкторе, поэтому автоматическое подключение свойств не является опцией.

Я сделал следующее:

@Component
@Scope("request")
public class MyClass{

    @Autowired(required=true)
    public MyClass(HttpServletRequest request, HttpServletResponse response) {

        // do stuff I need to do in the constructor

    }
}

Это дает мне следующую ошибку:

Конструктор по умолчанию не найден; Вложенным исключением является java.lang.NoSuchMethodException: com.foo.bar.MyClass. ()

Согласно этому сообщению об ошибке, он ищет конструктор по умолчанию без параметров, который не существует. Я автоматически связал конструктор и специально установил «required» в true, поэтому инжектор должен выбрать этот конструктор. Поскольку bean-компонент является областью действия запроса, это должно работать, но это не так.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Как упомянуто @Aravind, HttpServletResponse недоступно в качестве кандидата для автопровода.Тем не менее, вы можете получить доступ к ответу, используя ServletWebRequest.getResponse() и ServletWebRequest ( класс Spring * ) доступно в качестве кандидата для автопровода.

Сказав это, он может не сработать в конструкторе, но все равно попробовать:)

3 голосов
/ 17 января 2012

Насколько я понимаю, вы не сможете автоматически связать объект HttpServletResponse, используя стандартный подход.Проверьте метод registerWebApplicationScopes класса WebApplicationContextUtils.Разрешаемыми зависимостями являются только HttpSession.class и HttpSession.class.

Проверьте наличие специального решения здесь .

...