我在使用price=[]
def checkCondition(a,b):
global price
if a<b:
price.append(123) # also works without the global
price = 123
if __name__ == '__main__':
checkCondition(1,2)
print price
bean和扩展CommonsMultipartResolver
的初始化程序时遇到问题。
我在之前的项目中成功使用了CommonsMultipartResolver,但初始化程序实现了AbstractAnnotationConfigDispatcherServletInitializer
。
直观地说,我在扩展程序WebApplicationInitializer
中执行了此操作。
AbstractAnnotationConfigDispatcherServletInitializer
我认为它与@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{
MultipartUploadConfig.class
};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{
WebMvcConfig.class
};
}
中的此代码具有相同的效果(这是工作配置)。
WebApplicationInitializer
使用@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
dispatcherServlet.register(WebMvcConfig.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherServlet));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(MultipartUploadConfig.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
}
,我收到以下错误:
AbstractAnnotationConfigDispatcherServletInitializer
那么,任何人都知道如何让multipartResolver bean与Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
一起使用?
其他相关信息:
WebMvcConfig.java
AbstractAnnotationConfigDispatcherServletInitializer
MultipartUploadConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = ...)
public class WebMvcConfig extends WebMvcConfigurerAdapter {
...
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
堆栈追踪:
@Configuration
public class MultipartUploadConfig {
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(8192);
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
}
答案 0 :(得分:4)
知道了。 AbstractAnnotationConfigDispatcherServletInitializer
和WebApplicationInitializer
版本确实相互对应。没问题。问题是在使用AbstractAnnotationConfigDispatcherServletInitializer
的项目中,还有Spring Security并且搞砸了。
使用Spring Security时,多部分解析程序的Bean名称应为@Bean(name = "filterMultipartResolver")
。当然,这意味着MultipartFilter
应该像AbstractSecurityWebApplicationInitializer
这样设置。
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
insertFilters(servletContext, new MultipartFilter());
}