2014-09-30 11 views
20

Io uso xml config Spring4 è lavoro well.like questo:Come Config "CommonsMultipartResolver" in Spring4 senza xml caricare il file

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver" 
    p:defaultEncoding="utf-8" > 
    <!-- one of the properties available; the maximum file size in bytes --> 
    <!-- <property name="maxUploadSize" value="40000000" /> --> 
</bean> 

quando ho config Spring4 senza xml.like questo:

@Configuration 
@ComponentScan({ "common.user", "service" }) 
@EnableWebMvc 
public class SpringMVCConfig { 

@Bean 
public ViewResolver createInternalResourceViewResolver() { 
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
    viewResolver.setViewClass(JstlView.class); 
    viewResolver.setContentType("text/html"); 
    viewResolver.setPrefix("/view/"); 
    //viewResolver.setSuffix(".jsp"); 
    return viewResolver; 
} 

@Bean 
public DefaultServletHttpRequestHandler createDefaultServletHttpRequestHandler() { 
    return new DefaultServletHttpRequestHandler(); 
} 


@Bean 
public CommonsMultipartResolver createMultipartResolver() { 
    CommonsMultipartResolver resolver=new CommonsMultipartResolver(); 
    resolver.setDefaultEncoding("utf-8"); 
    return resolver; 
} 

}

viene generata un'eccezione:

九月 30, 2014 6:01:08 下午 org.apache.catalina.core.StandardWrapperValve invoke 
严重: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: [email protected]] with root cause 
java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: [email protected] 
    at org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver.resolveArgument(ServletRequestMethodArgumentResolver.java:97) 
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:79) 
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:157) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:124) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at common.servlet.RootFilter.doFilter(RootFilter.java:71) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

risposta

46

Da MultipartResolver Javadoc: Per definire un'implementazione, creare un bean con id "multipartResolver" nel contesto dell'applicazione DispatcherServlet.

Nella configurazione xml, il bean ha l'ID corretto di multipartResolver, ma non nella configurazione java corrente. Si dovrebbe scrivere:

@Bean 
public CommonsMultipartResolver multipartResolver() { 
    CommonsMultipartResolver resolver=new CommonsMultipartResolver(); 
    resolver.setDefaultEncoding("utf-8"); 
    return resolver; 
} 

o

@Bean(name = "multipartResolver") 
public CommonsMultipartResolver createMultipartResolver() { 
    CommonsMultipartResolver resolver=new CommonsMultipartResolver(); 
    resolver.setDefaultEncoding("utf-8"); 
    return resolver; 
} 
+0

vi ringrazio molto ~~ ho ottenuto ~ –

+1

serio! Ho perso 2 ore per quello! Perché Spring non prende l'unico bean che è di tipo CommonsMultipartResolver. E non parlo del messaggio di errore che diceva che il mio @RequestParam non era presente mentre avevo il mio file di input con il nome corretto. Onestamente, la primavera potrebbe fare meglio lì. Almeno, un messaggio di errore significativo. Grazie Serge Ballesta comunque. – Comencau

+0

L'ho fatto, ma continuo a ricevere errori sul tipo di contenuto non supportato. Qualche idea sul perché [questo non funziona] (http://stackoverflow.com/questions/42044639/file-upload-wont-work/42044768#42044768)? – displayname