java - 带有无效字符的 Spring Boot 控制器端点请求必须抛出 400 而不是 500?
问题描述
我正在测试一个 Spring Boot 微服务并执行一些安全检查。当我尝试使用无效字符向 URL 发送请求时,例如 https://server/api/dogs/%2500/puppies,您注意到“%2500”无效。服务抛出 500 Internal Server 错误并返回请求中存在无效字符的消息。
有没有办法在我的 Springboot 应用程序中验证请求中的 URL,以便它会抛出 400 Bad Request,而不是 500 Internal Server 错误。
解决方案
您可以使用@ControllerAdvice
支持通用异常处理机制的注释。
控制器建议允许您使用完全相同的异常处理技术,但将它们应用于整个应用程序,而不仅仅是单个控制器。
您可以将它们视为注释驱动的拦截器。(期待了解更多。)
@ControllerAdvice
class GlobalControllerExceptionHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(IllegalArgumentException.class)
public void handleIllegalArgumentException() {
// Nothing to do ..
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Object> handleMethodArgumentNotValidException(
MethodArgumentNotValidException e, WebRequest request) {
Map<String, Object> body = new LinkedHashMap<>();
body.put("timestamp", LocalDateTime.now());
body.put("message", "...");
return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
}
}
注意:此处的异常和返回信息是示例。您可以全局包含适合您自己示例的异常。
推荐阅读
- laravel - Laravel Lighthouse 中的授权
- puppeteer - 如何在页面加载时捕获致命错误?
- node.js - 问题连接节点与 mongodb
- encryption - 加密 - 在某些情况下,对所有加密操作使用相同的 IV 是否合理?
- algorithm - 找出阻止 A 到达 B 所需的最小阻塞数
- python - Kivy 应用程序在导入请求等模块时崩溃,我在 .spec 文件中也提到过,但应用程序仍然崩溃
- python - 如何在硒中定位嵌套元素
- xgboost - 基于数据分片的 XGBoost 训练
- r - 模拟非齐次泊松点过程并检索协变量系数
- react-native - 使用 React Native 实时搜索 API 结果