java - 如何将异常类型与其消息分开
问题描述
在 Spring Boot 应用程序中,我正在使用@ControllerAdvice
. 我能够处理异常。我的 JSON 消息是状态、错误、异常和路径。当我打印异常字符串时,我得到了异常并且它也是消息。
我的问题是在异常参数中如何仅打印没有消息的异常类型。因为消息我打印错误?
另一个问题是我只使用一个类(即异常类)来处理所有类型的异常。对于这里的每个例外,我都得到status code
了500
. 我们可以为不同类型的异常设置不同的状态码吗?
我们可以在这里传递状态码吗throw new NullPointerException("Null values are not allowed");
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ExceptionMessage> handleAllExceptionMethod(Exception ex,WebRequest requset,HttpServletResponse res) {
ExceptionMessage exceptionMessageObj = new ExceptionMessage();
exceptionMessageObj.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
exceptionMessageObj.setError(ex.getLocalizedMessage());
exceptionMessageObj.setException(ex.toString());
exceptionMessageObj.setPath(((ServletWebRequest) requset).getRequest().getServletPath());
return new ResponseEntity<ExceptionMessage>(exceptionMessageObj, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
}
解决方案
您需要在消息上设置名称,如下所示:
exceptionMessageObj.setException(ex.getClass().getCanonicalName());
例如:
System.out.println(new NoClassDefFoundError().getClass().getCanonicalName());
将返回
java.lang.NoClassDefFoundError
推荐阅读
- reactjs - 重定向不在 React 应用程序中重定向
- python - Python pandas如何从数据框中打印前10个最大值和最小值
- azure-data-factory - 使用显示数据框调试 ADF 和 Databricks
- uwp - UWP 自定义文本框样式
- python - 如何在 django rest_framework 的 1 个视图中同时创建 2 个不同的对象?DRF
- api - 在 Quarkus Microprofile 中验证 REST 参数
- css - 如果可能的话,如何使我的输入在所有浏览器和所有设备上保持一致?
- javascript - scrollTop 在 iOS 设备上没有一直滚动
- javascript - 带有distube 的discord 音乐机器人| 高分辨率照片| CLIPARTO 不和谐.js
- android - Android mkdirs() 在 Android 11 上使用 Environment.getExternalStorageDirectory() 返回 false