以我的經驗,盡管可能有限,但我只見過 ExceptionHandler 類用于立即回傳例外。我知道這是Exception Handler 類的目的,但這讓我想到了我的問題:如果請求驗證失敗,ExceptionHandler 類是否可以“修復”請求正文并重新運行請求?
例如,給定以下物件:
public class Person {
@Pattern(regexp = "[A-Za-z]")
private String firstName;
}
可以以下 Handler 類:
@ExceptionHandler(ParameterNotValidException.class)
public Map<String, String> handleValidationExceptions(
ParameterNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return errors;
}
修改如下:
@ExceptionHandler(ParameterNotValidException.class)
public void handleValidationExceptions(String requestBody) {
requestBody = removeSpecialCharacters(requestBody);
try {
personController.putPerson(requestBody);
} catch (Exception e) {
//fail gracefully
}
}
我提前道歉,這是我在 StackOverflow 上的第一個問題。
uj5u.com熱心網友回復:
這是不可接受的。ExceptionHandler是一個常見的地方,我們可以在其中管理和處理例外,并為 API 回應發送相應的錯誤代碼。
請參閱檔案。
它專為:
- 處理沒有 @ResponseStatus 注釋的例外(通常是您沒有撰寫的預定義例外)
- 將用戶重定向到專用的錯誤視圖
- 構建完全自定義的錯誤回應
在您的情況下,應在 json 序列化\反序列化階段處理特殊字符。在 Java 中轉義 JSON 字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439929.html
