前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创】008 | 搭上SpringBoot实战专车系列八:自定义错误页面

【原创】008 | 搭上SpringBoot实战专车系列八:自定义错误页面

作者头像
java进阶架构师
发布2021-02-22 14:29:09
3810
发布2021-02-22 14:29:09
举报
文章被收录于专栏:Java进阶架构师Java进阶架构师

专车解答

在上一篇SpringBoot集成数据持久化框架Mybatis最后提到一个问题,如何解决@Mapper注解这种开发负担。答案很简单,只需要告诉mabytis starter我们mapper接口的路径就可以了,这样就可以用更简便的方式达到同样的效果。实现代码如下:

代码语言:javascript
复制
@SpringBootApplication
@MapperScan(basePackages = "com.boot.example.mapper")
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
}

如果在启动类中添加了扫描配置,那么就需要去掉mapper接口上的注解

专车介绍

该趟专车是开往SpringBoot自定义错误页面的专车,在使用应用程序的时候,难免会出现各种各样的异常,比如500、404的异常,针对这种异常,我们需要给用户提供友好的展示界面,比如500我们可以提示用户“您的网络飞了,请稍后重试”,再比如404我们可以提示用户“您访问到外星球了”。此篇就来介绍如何针对异常自定义错误页面。

专车问题

第一个问题:如何针对不同的异常来自定义不同的友好界面?

专车分析

第一步:在父模块下面创建一个名为boot-example-error-page的子模块

第二步:子模块添加依赖

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

第三步:创建控制器并实现ErrorController

代码语言:javascript
复制
@Controller
public class CustomErrorController implements ErrorController {

    @Override
    public String getErrorPath() {
        return "error";
    }

    @GetMapping("/error")
    public String error(HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        if (status != null) {
            int statusCode = Integer.parseInt(status.toString());

            if(statusCode == HttpStatus.NOT_FOUND.value()) {
                return "error-404";
            }
            else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "error-500";
            }
        }
        return "error";
    }
}

第四步:创建一个控制器,用来抛出异常

代码语言:javascript
复制
@RestController
public class IndexController {

    @GetMapping("/")
    public void index() {
        throw new NullPointerException();
    }
}

第五步:创建启动类

代码语言:javascript
复制
@SpringBootApplication
public class ErrorApplication {

    public static void main(String[] args) {
        SpringApplication.run(ErrorApplication.class, args);
    }
}

第六步:在resources目录下面创建templates目录,然后分别创建对应的异常页面

错误页面:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <label>custom error page</label>
</body>
</html>

404页面:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <label>custom error page 404</label>
</body>
</html>

500页面

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <label>custom error page 500</label>
</body>
</html>

第七步:访问应用

访问:http://localhost:8080/会展示custom error page 500

访问http://localhost:8080/notfound会展示custom error page 404

专车总结

第一个问题:如何针对不同的异常返回自定义错误页面?自定义错误页面最主要的是要实现ErrorController,然后从request作用域中获取相应的错误码,针对不同的错误码,返回对应的页面

专车地址

[SpringBoot自定义错误页面](https://github.com/a601942905git/boot-example/tree/master/boot-example-error-page)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java进阶架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 专车解答
  • 专车介绍
  • 专车问题
  • 专车分析
  • 专车总结
  • 专车地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档