在Spring MVC中处理Multipart和非多部分HTTP POST

时间:2011-06-15 02:16:59

标签: java spring http spring-mvc

我有一个用于上传文件的SpringMVC Web服务,如下所示:

@RequestMapping(value="/upload.json", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> upload(MultipartHttpServletRequest request) {
    // upload the file
}

一切都很花花公子。但是,如果其中一个消费者发布非多部分表单,那么我会得到此异常

java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]

哪个有意义..但是我不希望我的最终用户看到500个servlet异常。我想要一条友好的错误消息。

我刚刚试过这个(就像其他POST一样):

@RequestMapping(value="/upload.json", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> upload2(){ 
// return friendly msg 
}

但是我收到了这个错误:

java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path '/upload.json'

有没有办法安全地处理多部分和非多部分POST请求?在一种方法中,或两种不同的方法,我不在乎。

1 个答案:

答案 0 :(得分:14)

请自行检查请求是否为多方:

@RequestMapping(value="/upload.json", method = RequestMethod.POST) 
public @ResponseBody Map<String, Object> upload(HttpServletRequest request) {
    if (request instanceof MultipartHttpServletRequest) {
        // process the uploaded file
    }
    else {
        // other logic
    }
}