SpringBoot自定义ErrorController

前因

  1. SpringBoot默认有自定义异常处理的体系,在做SpringBoot项目的时候,如果是抛出了运行时异常,springBoot并会对异常进行处理,返回如下异常信息:

    {
        "timestamp": 1517294278132,
        "status": 500,
        "error": "Internal Server Error",
        "exception": "com.lgy.common.exception.BusinessException",
        "message": "[001]自定义的uncheck 异常!",
        "path": "/validateExceptionTest"
    }
    

    追究其原因,发现SpirngBoot出现异常信息时候,会默认访问/error,springBoot种有BasicErrorController这个类来处理异常信息;

  2. 出现以下错误:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'basicErrorController' method 
     org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
     to { /error}: There is already 'myErrorController' bean method
     com.test.MyErrorController#myerror() mapped.
    

解决方案:

  1. application.yml

    server:
      error:
        path: error/fail
    
  2. ErrorController

    /**
     * @author: zhangenke
     * @date: 2020/12/22 on 6:01 下午
     * @desc: 解决自定义server.error.path后,自带的ErrorController与自定义errorController冲突问题
     *     <p>如果自定义server.error.path后,错误路径就是前缀+定义名称。否则就是前缀+/error
     *     <p>${server.error.path:${error.path:/error}} 如果前面不存在则找:后面的值
     */
    @Slf4j
    @ApiIgnore
    @RestController
    @RequestMapping("${server.error.path:${error.path:/error}}")
    public class ErrorController implements org.springframework.boot.web.servlet.error.ErrorController {
    
      private static final String PATH = "/随便命名-跟他没有半毛钱关系";
    
      @Override
      public String getErrorPath() {
        return PATH;
      }
    
      @RequestMapping
      public Result<Object> doHandleError() {
        return Result.fail("被拦截,请稍后重试");
      }
    }
    

    应该是没有配置全局异常导致的前因以及需要配置一个额外的控制层;

  3. 随便请求接口即可看到效果
    在这里插入图片描述

在Spring Boot中,可以通过自定义组件来实现对应用程序的定制和扩展。下面是一些常见的自定义组件: 1. 自定义Starter:Spring Boot提供了Starter依赖的机制,可以简化依赖管理和配置。你可以创建自己的Starter,将常用的依赖、配置和自动配置打包成一个模块,方便其他项目引用和使用。 2. 自定义自动配置类:Spring Boot通过自动配置类来自动配置一些常用的组件和功能。你可以创建自己的自动配置类,并通过条件注解来控制其生效条件,从而实现对特定组件或功能的自定义配置。 3. 自定义注解:通过自定义注解,你可以实现对某些类、方法或属性的标记,从而在应用程序中实现特定的逻辑。比如,可以创建一个自定义注解来标记需要进行事务管理的方法,然后通过AOP技术实现对这些方法的事务处理。 4. 自定义内嵌容器配置:Spring Boot默认使用Tomcat作为内嵌容器,但你也可以通过自定义配置来切换到其他容器,如Jetty或Undertow。可以通过创建一个继承自`EmbeddedServletContainerCustomizer`的Bean来实现对内嵌容器的定制。 5. 自定义错误页面:Spring Boot可以根据错误状态码自动显示错误页面,但你也可以自定义错误页面,以提供更好的用户体验。可以创建一个继承自`ErrorController`的Controller来处理错误请求,并指定对应的错误页面。 这些只是自定义组件的一些常见示例,你可以根据自己的需求进一步扩展和定制。在实际开发中,你可以根据具体场景选择需要自定义的组件,并按照Spring Boot的规范进行实现和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值