加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 无法处理部件,因为未提供多部件配置

发布时间:2020-12-15 01:25:00 所属栏目:大数据 来源:网络整理
导读:我写了一个简单的控制器来上传文件: @RestEndpointpublic class ImageController { @Autowired GridFsTemplate mTemplate; @RequestMapping(value = "images",method = RequestMethod.POST) public @ResponseBody String testPhoto(@RequestParam String na

我写了一个简单的控制器来上传文件:

@RestEndpoint
public class ImageController {
    @Autowired
    GridFsTemplate mTemplate;

    @RequestMapping(value = "images",method = RequestMethod.POST)
    public @ResponseBody String testPhoto(@RequestParam String name,@RequestParam String directory,@RequestParam MultipartFile file) throws IOException {

        if(!file.isEmpty()){
            final byte[] bytes = file.getBytes();
            InputStream inputStream = new ByteArrayInputStream(bytes);
            mTemplate.store(inputStream,"name");

            return "uploaded photo";
        }

        return "failed";
    }

} 

@RestEndpoint注释是:

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
public @interface RestEndpoint
{
    String value() default "";
}

我的ContextCOnfiguration类是:

@Configuration
@EnableWebMvc
@ComponentScan(
    basePackages = "com.questter.site",useDefaultFilters = false,includeFilters =
    @ComponentScan.Filter({RestEndpoint.class,RestEndpointAdvice.class})
)
public class RestServletContextConfiguration extends WebMvcConfigurerAdapter {
    @Bean
    public CommonsMultipartResolver multiPartResolver(){

        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        return resolver;
    }
...
}

– – 更新 – –

web.xml文件:

– – 更新 – –

public class Bootstrap implements WebApplicationInitializer
{

    @Override
    public void onStartup(ServletContext container) throws ServletException
    {
        container.getServletRegistration("default").addMapping("/resource/*");

        AnnotationConfigWebApplicationContext rootContext =
            new AnnotationConfigWebApplicationContext();
        rootContext.register(RootContextConfiguration.class);
        container.addListener(new ContextLoaderListener(rootContext));

        AnnotationConfigWebApplicationContext webContext =
            new AnnotationConfigWebApplicationContext();
        webContext.register(WebServletContextConfiguration.class);
        ServletRegistration.Dynamic dispatcher = container.addServlet(
            "springWebDispatcher",new DispatcherServlet(webContext)
        );
        dispatcher.setLoadOnStartup(1);
        dispatcher.setMultipartConfig(new MultipartConfigElement(
            null,20_971_520L,41_943_040L,512_000
        ));
        dispatcher.addMapping("/");

        AnnotationConfigWebApplicationContext restContext =
                new AnnotationConfigWebApplicationContext();
        restContext.register(RestServletContextConfiguration.class);
        DispatcherServlet servlet = new DispatcherServlet(restContext);
        servlet.setDispatchOptionsRequest(true);
        dispatcher = container.addServlet(
                "springRestDispatcher",servlet
        );
        dispatcher.setLoadOnStartup(2);
        dispatcher.addMapping("/rest/*");

        rootContext.refresh();
        DbBootstrap dbBootstrap = rootContext.getBean(DbBootstrap.class);
        dbBootstrap.init();

    }


}

当执行一个帖子请求(使用邮递员)时,我得到:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException:Expected MultipartHttpServletRequest: is a MultipartResolver configured 

我已经在stackoverflow上查看了一些类似的问题,但没有一个答案有帮助
我.

Spring版本是:4.0.4

任何帮助将不胜感激(当然竖起大拇指).

谢谢

最佳答案
我不知道他们为什么这样做,但上下文中的MultipartResolver bean需要命名为multipartResolver.将@Bean方法重命名为

public CommonsMultipartResolver multipartResolver(){ // lowercase 'P'

或者明确地给它命名

@Bean(name = "multipartResolver")
public CommonsMultipartResolver canBeCalledAnything(){

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读