我正在嘗試建立一個大型的REST服務服務器。我們正在使用Spring Boot 1.2.1,Spring 4.1.5和Java8。我們的控制器正在實現@RestController和標準的@RequestMapping注釋。我的問題是Spring Boot為控制器異常設置了默認重定向到/error。從文檔:Spring Boot默認提供一個/ error映射,以一種明智的方式處理所有錯誤,并且在servlet容器中注冊為“全局”錯誤頁面。對使用Node.js編寫REST應用程序已有多年的經驗,對我而言,這絕非明智之舉。服務端點生成的任何異常都應在響應中返回。我不明白為什么您要將重定向發送到最有可能是Angular或JQuery SPA使用者的地方,該使用者只是在尋找答案,不能或不會對重定向采取任何措施。我想做的是設置一個可以接受任何異常的全局錯誤處理程序-有目的地從請求映射方法拋出,或者由Spring自動生成(如果未為請求路徑簽名找到處理程序方法,則為404),然后返回標準格式的錯誤響應(400、500、503、404)到客戶端,而無需任何MVC重定向。具體來說,我們將處理錯誤,使用UUID將其記錄到NoSQL,然后將正確的HTTP錯誤代碼與JSON正文中的日志條目的UUID返回給客戶端。文檔對如何執行此操作一直含糊不清。在我看來,您必須創建自己的ErrorController實現或以某種方式使用ControllerAdvice,但是我所看到的所有示例仍然包括將響應轉發到某種錯誤映射,這沒有幫助。其他示例建議您必須列出要處理的每個Exception類型,而不僅僅是列出“ Throwable”并獲取所有內容。誰能告訴我我錯過了什么,或者在沒有暗示Node.js更容易處理的前提下為我指出正確的方向?
3 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
我認為ResponseEntityExceptionHandler符合您的要求。HTTP 400的示例代碼片段:
@ControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler {
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler({HttpMessageNotReadableException.class, MethodArgumentNotValidException.class,
HttpRequestMethodNotSupportedException.class})
public ResponseEntity<Object> badRequest(HttpServletRequest req, Exception exception) {
// ...
}
}
添加回答
舉報
0/150
提交
取消