【发布时间】:2015-08-16 03:33:51
【问题描述】:
我有一个 REST-Service 定义如下
@RequestMapping(value = "/{userId}/profileimage/{language}", method = RequestMethod.PUT)
public String uploadProfileImage(@PathVariable String userId, @RequestParam MultipartFile file, @PathVariable String language) throws IOException { ...}
并定义了一个多部分过滤器
@Bean
public FilterRegistrationBean multipartFilter() {
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(new MultipartFilter());
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/*");
filterRegBean.setUrlPatterns(urlPatterns);
return filterRegBean;
}
还有一个 multipartConfigElement
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigElement config = new MultipartConfigElement("");
return config;
}
但是当我向 REST 服务发送多部分消息时,我仍然收到以下异常:
servlet [dispatcherServlet] 在路径 [/dev] 的上下文中的 Servlet.service() 引发异常 [请求处理失败;嵌套异常是 java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?]
该服务受 Spring Security 保护(作为辅助信息),Spring Boot 在启动时记录以下内容
添加了现有的过滤器初始化 bean 'multipartFilter'; order=2147483647,resource=class 路径资源[com/fl/wir/config/MvcConfigurations.class]
映射过滤器:'multipartFilter' 到 url:[/*]
多部分自动配置 - 找到@ConditionalOnClass 类:javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver,javax.servlet.MultipartConfigElement (OnClassCondition) - 匹配(OnPropertyCondition)
DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver - @ConditionalOnMissingBean (names: multipartResolver; SearchStrategy: all) 找到以下 [multipartResolver] (OnBeanCondition)
知道为什么我仍然会收到异常吗? (使用 Spring-Boot 1.2.3.RELEASE)
【问题讨论】:
-
不要指定那些只是将appropriate properties 添加到
application.properties。文件上传和 PUT 也不起作用,仅适用于 POST。
标签: spring rest spring-mvc spring-boot