首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PUT方法缺少Spring

PUT方法缺少Spring
EN

Stack Overflow用户
提问于 2014-09-02 21:39:06
回答 3查看 7K关注 0票数 7

我正在使用Spring创建REST服务,并得到一个异常,告诉我以下内容。

预期的MultipartHttpServletRequest:配置了MultipartResolver吗?

当我将method=RequestMethod.PUT更改为method=RequestMethod.POST时,它正在工作。

为什么我把这一例外放在一边,而不是在邮寄上?

代码语言:javascript
运行
复制
@Configuration
@ComponentScan("io.myservice")
@EnableAutoConfiguration
@EnableCaching
@EnableAsync(mode = ASPECTJ)
public class Application implements AsyncConfigurer {

static org.slf4j.Logger LOG = LoggerFactory.getLogger(Application.class);

public static final String MAX_FILE_SIZE = "2MB";
public static final String MAX_REQUEST_SIZE = "2MB";
public static final String FILE_SIZE_THRESHOLD = "2MB";

@Value("${app.dir.incoming}")
public String createdDir;

@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean() {
    return new LocalValidatorFactoryBean();
}

@Bean
MultipartConfigElement multipartConfigElement() {
    String absTempPath = new File(createdDir).getAbsolutePath();
    MultipartConfigFactory  factory = new MultipartConfigFactory();
    factory.setMaxFileSize(MAX_FILE_SIZE);
    factory.setMaxRequestSize(MAX_REQUEST_SIZE);
    factory.setFileSizeThreshold(FILE_SIZE_THRESHOLD);
    factory.setLocation(absTempPath);
    return factory.createMultipartConfig();
}

@Bean
public StandardServletMultipartResolver multipartResolver() {
    return new StandardServletMultipartResolver();
}

@Override
@Bean
public ThreadPoolTaskExecutor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(2);
    executor.setMaxPoolSize(2);
    executor.setQueueCapacity(5);
    executor.initialize();
    return executor;
}

@Bean
public SimpleCacheManager cacheManager(){
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    List<Cache> caches = new ArrayList<Cache>();
    caches.add(cacheBean());
    cacheManager.setCaches(caches );
    return cacheManager;
}

@Bean
public Cache cacheBean(){
    Cache  cache = new ConcurrentMapCache("default");
    return cache;
}

public static void main(String[] args) throws IOException {
    SysOutOverSLF4J.sendSystemOutAndErrToSLF4J();
    run(Application.class, args);
}
}


@RequestMapping(value="/converter", method=RequestMethod.PUT)
@ResponseBody
public String convert(MultipartFile file) {
    LOG.info("received new file to convert")
}


Caused by: java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.resolveName(RequestParamMethodArgumentResolver.java:171)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:89)
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:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
... 37 common frames omitted
EN

Stack Overflow用户

发布于 2014-09-04 08:16:11

对我来说,使用PUT的最终效果是使用InputStream而不是MultipartFile

代码语言:javascript
运行
复制
    @RequestMapping(value="/converter", method=RequestMethod.PUT)
    @ResponseBody
    public String convert(InputStream file) 

通过这种方式,我能够使用file bodymultipart body上传文件内容。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25632836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档