2016-09-18 131 views
0

我創建了一個簡單的REST端點,客戶端可以使用Spring Boot使用多部分表單數據發佈。 REST端點接受一個txt文件並執行必要的功能。但是,當請求無效或不正確時,我無法返回正確的HTTP響應。如何正確響應當前請求不是REST中的多部分請求

我的控制器看起來像

@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 "[email protected]" 

有了這個請求,一切正常。現在讓我們說用戶無法附加文件或任何其他不正確的請求,我無法捕獲它。它進入調度程序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

我是新來的春天,但我相信你可以在你的控制器來處理MultipartException寫一個異常處理程序。當引發異常時,控制器中的處理程序方法將執行。這裏可能會幫助你.https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc – jmw5598

回答

0

您可以像下面那樣使用@ExceptionHandler方法來處理異常。

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

當春天嘗試解析MultipartFile而不能,則拋出異常,並且該exeception的撥款註釋的方法將跑。

編輯:這裏有一些可能有用的資源。

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

相關問題