如何正确响应当前请求不是REST中的多部分请求

时间:2016-09-18 22:26:46

标签: java spring http servlets multipartform-data

我创建了一个简单的REST端点,客户端可以使用Spring Boot发布多部分表单数据。 REST端点接受txt文件并执行必要的功能。但是当请求无效或不正确时,我无法返回正确的HTTP响应。

我的控制器看起来像

@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create(@RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {  
        //perform some steps        
        return "file succesfully creted!";
    }else{
        logger.warn("file is empty");
        return "file wrong";
    }
}

我希望REST使用ResponseEntity正确发送正确的HTTP响应和状态。现在当客户提出请求时

curl -X POST localhost:8080:/create -F "file=@sample.txt"

有了这个请求,一切正常。现在假设用户无法附加文件或任何其他不正确的请求我无法捕获它。它进入调度程序servlet并抛出错误。

{
  "timestamp": 1474236317572,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "org.springframework.web.multipart.MultipartException",
  "message": "Current request is not a multipart request",
  "path": "/create"
}

如何处理此错误并将其发回给用户。我应该有过滤器吗?我该怎么写这个过滤器?或者应该尝试/捕获?

1 个答案:

答案 0 :(得分:0)

您可以使用下面的@ExceptionHandler方法处理异常。

@ExceptionHandler(MultipartException.class)
public ResponseEntity<String> handleMultipartException(HttpServletRequest request, Exception e) {
    return new ResponseEntity<>("Error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}

当spring尝试解析MultipartFile但不能时,抛出异常并运行该异常的适当注释方法。

编辑:以下是一些可能有用的资源。

https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc https://www.youtube.com/watch?v=oG2rotiGr90