首页 > 解决方案 > 如何将异常类型与其消息分开

问题描述

在 Spring Boot 应用程序中,我正在使用@ControllerAdvice. 我能够处理异常。我的 JSON 消息是状态、错误、异常和路径。当我打印异常字符串时,我得到了异常并且它也是消息。

我的问题是在异常参数中如何仅打印没有消息的异常类型。因为消息我打印错误?

另一个问题是我只使用一个类(即异常类)来处理所有类型的异常。对于这里的每个例外,我都得到status code500. 我们可以为不同类型的异常设置不同的状态码吗?

我们可以在这里传递状态码吗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);

}

在此处输入图像描述

标签: javaspring-bootexception

解决方案


您需要在消息上设置名称,如下所示:

exceptionMessageObj.setException(ex.getClass().getCanonicalName());

例如:

System.out.println(new NoClassDefFoundError().getClass().getCanonicalName());

将返回

java.lang.NoClassDefFoundError

推荐阅读