我创建了一个简单的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"
}
如何处理此错误并将其发回给用户。我应该有过滤器吗?我该怎么写这个过滤器?或者应该尝试/捕获?
答案 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