【发布时间】:2017-09-12 10:46:50
【问题描述】:
我有一个使用 spring-boot 和嵌入式 Tomcat 进行开发的应用程序,并在生产服务器上部署在 JBoss 6.4 EAP . 添加对 JBoss 的支持后,分段文件上传停止工作。在两个容器上它都抛出 MissingServletRequestPartException。
添加 MultipartConfigElement 到 ServletRegistrationBean 解决了在 tomcat 上的这个问题,但对于 JBoss,它仍然无法正常工作。你有什么想法是哪里出了问题?
配置:
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet, MultipartConfigElement
multipartConfig) {
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
registration.getUrlMappings().clear();
registration.addUrlMappings("/*");
registration.setMultipartConfig(multipartConfig);
return registration;
}
端点:
@RequestMapping(method = POST)
@ResponseBody
public SomeResponse uploadFileWithComment(
@RequestParam(value = "file") final MultipartFile file,
@RequestParam(value = "comment") String comment) {
...
}
web.xml
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.rebelek.Application</param-value>
</init-param>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
【问题讨论】:
-
如果您实际使用的是 Spring Boot,那么为什么要使用
web.xml?基本上,您现在正在使用不同的配置进行开发和生产。此外,如果您真的需要这个,您将需要 Spring Boot Legacy 的东西来正确引导事物。 -
如果没有 web.xml 应用程序没有正确部署到 jboss,即使主类扩展 SpringBootServletInitializer 并覆盖配置方法,有 @SpringBootApplication 注释并且在 pom.xml 中设置了
。完成部署后未检测到端点,每个 url 都给我 404。但我没有放弃,仍在努力使其保持一致。 -
如前所述,如果您使用 web.xml,请使用 Spring Boot Legacy 项目进行引导。您对 dev 和 prod 有不同的配置,您正在引导而不是 spring boot,这基本上会禁用所有内容。
-
删除 web.xml 并在 servlet 初始化程序中添加丢失的条目后 onStartup() 问题得到解决。谢谢你们两位的指导。
-
@Rebelek 考虑将其添加为答案
标签: java spring-boot jboss multipart