当前位置: 首页 > 知识库问答 >
问题:

Rest服务中的Spring Boot自定义异常

张照
2023-03-14

我在基于Spring Boot的Rest服务中定义了一个全局异常处理:

@ControllerAdvice
public class GlobalExceptionController {

    private final Logger LOG = LoggerFactory.getLogger(getClass());

    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR, reason = "Internal application error")
    @ExceptionHandler({ServiceException.class})
    @ResponseBody
    public ServiceException serviceError(ServiceException e) {
        LOG.error("{}: {}", e.getErrorCode(), e.getMessage());
        return e;
    }
}
public class ServiceException extends RuntimeException {

    private static final long serialVersionUID = -6502596312985405760L;

    private String errorCode;

    public ServiceException(String message, String errorCode, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
    }

    // other constructors, getter and setters omitted
}
{
   "timestamp": 1413883870237,
   "status": 500,
   "error": "Internal Server Error",
   "exception": "org.example.ServiceException",
   "message": "somthing goes wrong",
   "path": "/index"
}

那么我如何在我的应用程序中定义一个自定义的异常响应。

共有1个答案

龙隐水
2023-03-14

Spring Boot使用errorAttributes的实现来填充呈现为JSON的Map。默认情况下,使用DefaulTerrorAttributes的实例。若要包含自定义ErrorCode,您需要提供一个自定义ErrorAttributes实现,该实现知道ServiceException及其错误代码。这个自定义实现在您的配置中应该是一个@bean

一种方法是子类DefaulTerrorAttributes:

@Bean
public ErrorAttributes errorAttributes() {
    return new DefaultErrorAttributes() {

        @Override
        public Map<String, Object> getErrorAttributes(
                RequestAttributes requestAttributes,
                boolean includeStackTrace) {
            Map<String, Object> errorAttributes = super.getErrorAttributes(requestAttributes, includeStackTrace);
            Throwable error = getError(requestAttributes);
            if (error instanceof ServiceException) {
                errorAttributes.put("errorCode", ((ServiceException)error).getErrorCode());
            }
            return errorAttributes;
        }

    };
}
 类似资料:
  • 我正在使用来自外部API的一些RESTendpoint,为此我正在使用REST模板接口。当我从这些调用中收到某些HTTP状态代码时,我希望能够抛出自定义应用程序异常。为了实现它,我正在实现ResponseErrorHandler接口,如下所示: 最后,这是客户端代码(无关代码省略): 我的应用程序上下文: 我怀疑我没有正确理解此自定义错误处理的行为。每个rest模板方法都可能抛出一个RestCli

  • 我想为REST API做自定义异常处理。 这是我掌握的密码。 如何使自定义错误类捕获并显示自定义错误? 谢谢

  • 我正在学习如何使用apache cxf构建rest服务,并学习了一个教程。但当我运行代码时,我遇到了以下异常 我的cxf.xml文件是这样的 请帮我解决这个问题。

  • 我正在尝试让我自己的身份验证服务与我的nextJS应用程序一起工作。我自己的身份验证服务是一个简单的rest api,在输入正确的凭据时返回JWT访问令牌和JWT刷新令牌。 目前,我正在将JWT刷新令牌设置为httpOnly cookie,并将JWT访问令牌设置为我的nextjs应用程序中的状态变量(内存中)。 我被困在以下几点: > 如何将此访问令牌传递给? 我想将存储在内存中的访问令牌传递给,

  • 本文向大家介绍Springboot之自定义全局异常处理的实现,包括了Springboot之自定义全局异常处理的实现的使用技巧和注意事项,需要的朋友参考一下 前言: 在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try.

  • 我们实现了一些新的Rest API作为Keycloak提供程序。提供程序正在工作,但我们找不到检查用户角色的方法。 我们在网上找不到任何例子