idea创建web项目运行报404错误_SpringBoot2.x系列教程35--整合SpringMVC之错误处理深度定制实现...

SpringBoot2.x系列教程35--整合SpringMVC之错误处理深度定制实现作者:一一哥一. 自定义错误处理
经过上一章节的学习,我们了解了Spring Boot底层是怎么处理error的。那么看了上面的源码后,我们是否可以自己定义404或者500的错误页面返回给客户端呢?自定义错处处理方式
Spring Boot开发指南上提供了以下四种方式:
1️⃣. 自定义一个bean,实现ErrorController接口,那么默认的错误处理机制将不再生效;
2️⃣. 自定义一个bean,继承BasicErrorController类,使用一部分现成的功能,自己也可以添加新的public方法,使用@RequestMapping及其produces属性指定新的地址映射;
3️⃣. 自定义一个ErrorAttribute类型的bean,那么还是默认的两种响应方式,只不过改变了内容项而已;
4️⃣. 继承AbstractErrorController.
接下来我给大家简单讲解几种实现自定义错误的处理实现方式。二. 自定义错误处理页面
首先我们讲解一个简单的实现错误处理的方式,就是用我们自定义的html页面来替换默认的”whitelabel“页面。1. 创建一个web项目(略)
目录结构如下,创建过程略。

7970d76d79b86ce33d17151340c5c8cf.png

2. 创建自定义的错误页面
我们在src/main/resources路径下,新建文件夹reources/static/error文件夹,然后新建404.html和500.html,然后编写自己想要的错误内容即可:2.1 404.html页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>404</title> </head> <body> <h1>亲,你要找的页面跑到火星去了哦...</h1> </body> </html>2.2 500.html页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>500</title> </head> <body> <h1>服务器有点累了...</h1> </body> </html>3. 创建Controller测试接口方法
我们创建一个Controller类,里面创建两个测试接口方法。
package com.yyg.boot.web; import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * @Description Description * @Author 一一哥Sun * @Date Created in 2020/3/27 */ @Controller public class HelloController { @ResponseBody @GetMapping("/show") public String showMsg() { return "success"; } @GetMapping("/showError") public void showError() { throw new RuntimeException("自定义异常..."); } }4. 重启程序,进行测试正常访问时的效果:

51635568c5047393f9573502e2e1d221.png

产生404异常时跳转到的页面:

09e487cba19ebdac4ac657095ae9295e.png

产生500错误时跳转到的页面:

40621c7f62a0bc1a9fd631a37b814f36.png

上面的实现方式虽然简单,但是这种自定义错误页面的方式只对浏览器有效,对非浏览器发送来的请求则不会生效,效果如下:

06dd3f65093b9578eeb2c8ff23132fea.png

因此下面我们讲一下如何通过自定义异常处理来解决这个问题。三. Spring Boot中返回JSON格式来处理异常
接下来我们通过@ControllerAdvice@ExceptionHandler注解,来统一定义处理不同的Exception,从而映射到不同的错误处理页面.
而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这时我们只需在@ExceptionHandler之后加入@ResponseBody,就能将处理函数return的内容转换为JSON格式.
下面具体讲述如何实现返回JSON格式的异常处理方案.
我们继续在上一个案例的项目中完成下面的内容。1. 创建统一的JSON返回对象
创建统一的JSON返回对象,code:消息类型;message:消息内容;url:请求的url;data:请求返回的数据.
package com.yyg.boot.domain; import lombok.Data; /** * @Description Description * @Author 一一哥Sun * @Date Created in 2020/3/27 */ @Data public class ErrorInfo<T> { public static final Integer OK = 0; public static final Integer ERROR = 100; private Integer code; private String message; private String url; private T data; }2. 创建一个自定义异常类CustomException
该类用来实验捕获该异常,并返回json.
package com.yyg.boot.exception; /** * @Description 自定义异常类 * @Author 一一哥Sun * @Date Created in 2020/3/27 */ public class CustomException extends Exception{ public CustomException(String message) { super(message); } }3. 在controller中创建一个接口方法
@RequestMapping("/json") public String handleJsonException() throws CustomException { throw new CustomException("json格式的异常处理方案..."); }4. 在GlobalExceptionHandler类中创建一个异常处理方法
在com.yyg.boot.exception中创建一个全局的GlobalExceptionHandler异常处理类,在该类上添加@ControllerAdvice注解。
package com.yyg.boot.exception; import com.yyg.boot.domain.ErrorInfo; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; /** * @Description Description * @Author 一一哥Sun * @Date Created in 2020/3/27 */ @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = CustomException.class) @ResponseBody public ErrorInfo<String> jsonErrorHandler(HttpServletRequest req, CustomException e) throws Exception { ErrorInfo<String> info = new ErrorInfo<>(); info.setMessage(e.getMessage()); info.setCode(ErrorInfo.ERROR); info.setData("JSON格式异常处理信息"); info.setUrl(req.getRequestURL().toString()); return info; } }5. 项目结构

9358ea690de05e4946811c77b13d7f7a.png

6. 验证结果
启动应用,访问:http://localhost:8080/json,得到如下响应内容:

2981a004ff5baef9cf4e19e19e6d0b07.png

5010281e2463fb29d96a2db0ab519b58.png

此时会发现无论是用浏览器,还是postman,测试得到的结果都是jsno格式的数据。
至此,已完成在Spring Boot中创建统一的异常处理,实际实现还是依靠Spring MVC的注解,更多更深入的使用可参考Spring MVC的文档.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值