Как получить MultipartHttpServletRequest от RequestContextHolder? - PullRequest
4 голосов
/ 08 июля 2011

Я настроил диспетчер принятия решений о доступе для проверки запроса перед его обработкой сервлетом. Ключевая строка: -

HttpServletRequest request = (HttpServletRequest) RequestContextHolder.currentRequestAttributes().getRequest(); 

Все хорошо. Однако, когда запрос enctype="multipart/form-data" как мне получить MultipartHttpServletRequest, когда RequestContextHolder.currentRequestAttributes().getRequest() возвращает только HttpServletRequest?

Я использую пружину 2.5.

Ответы [ 5 ]

2 голосов
/ 23 июля 2014

Помимо наличия

<form method=<method> action=<url> enctype="multipart/form-data"></form>

в файле конфигурации пружины должно быть

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

.

Вот хороший учебник по тому же

http://techdive.in/spring/spring-file-upload

2 голосов
/ 10 июля 2011

MultipartHttpServletRequest - это специфичный для Spring интерфейс для обработки составных заявок.Реализация по умолчанию - DefaultMultipartHttpServletRequest, у которой есть конструктор, который принимает HttpServletRequest.

Итак:

HttpServletRequest originalRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
MultipartHttpServletRequest multiPartRequest = new DefaultMultipartHttpServletRequest(originalRequest);
0 голосов
/ 03 сентября 2013

Я не думаю, что вы можете получить DefaultMultipartHttpServletRequest из RequestContextHolder. DefaultMultipartHttpServletRequest действительно реализует HttpServletRequest. Но есть 2 экземпляра запроса, если вы используете CommonsMultipartResolver. Одним из них является экземпляр DefaultMultipartHttpServletRequest, а другим - экземпляр HttpServletRequest. На самом деле я не знаю, как получить первый экземпляр из RequestContextHolder. Вы можете получить второй экземпляр от него.

0 голосов
/ 12 июня 2013

Если вы используете spring-mvc, убедитесь, что вы поставили эту строку

<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

в вашем app-config.xml.

Это сработало для меня.

0 голосов
/ 08 июля 2011

Вы пробовали кастовать на MultipartHttpServletRequest?

...