Spring ExceptionHandler 可以用于重新 运行 端点吗?
Can the Spring ExceptionHandler be used to re-run endpoints?
根据我的经验,尽管可能有限,我只见过 ExceptionHandler class 用于立即 return 异常。我知道这是 ExceptionHandler class 的目的,但这让我想到了我的问题:如果请求验证失败,ExceptionHandler class 是否有可能要“修复”请求正文并重新运行 请求?
例如,给定以下对象:
public class Person {
@Pattern(regexp = "[A-Za-z]")
private String firstName;
}
可以使用以下处理程序 class:
@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
}
}
提前致歉,这是我在 Whosebug 上的第一个问题。
这是不可接受的。 ExceptionHandler
是一个常见的地方,我们可以在其中管理和处理异常并为 API 响应发送相应的错误代码。
参见documentation。
它专为:
- Handle exceptions without the @ResponseStatus annotation (typically predefined exceptions that you didn’t write)
- Redirect the user to a dedicated error view
- Build a totally custom error response
在您的情况下,特殊字符应在 json serialisation\deserialisation 阶段处理。 Escape JSON string in Java
根据我的经验,尽管可能有限,我只见过 ExceptionHandler class 用于立即 return 异常。我知道这是 ExceptionHandler class 的目的,但这让我想到了我的问题:如果请求验证失败,ExceptionHandler class 是否有可能要“修复”请求正文并重新运行 请求?
例如,给定以下对象:
public class Person {
@Pattern(regexp = "[A-Za-z]")
private String firstName;
}
可以使用以下处理程序 class:
@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
}
}
提前致歉,这是我在 Whosebug 上的第一个问题。
这是不可接受的。 ExceptionHandler
是一个常见的地方,我们可以在其中管理和处理异常并为 API 响应发送相应的错误代码。
参见documentation。
它专为:
- Handle exceptions without the @ResponseStatus annotation (typically predefined exceptions that you didn’t write)
- Redirect the user to a dedicated error view
- Build a totally custom error response
在您的情况下,特殊字符应在 json serialisation\deserialisation 阶段处理。 Escape JSON string in Java