错误处理
友好页面
先演示非友好页面,修改 FastJsonController 类中的 test 方法:
[图片上传失败...(image-adcc6f-1524637491856)]
[图片上传失败...(image-a605b3-1524637491856)]
当系统报错时,返回到页面的内容通常是一些杂乱的代码段,这种显示对用户来说不友好,因此我们需要自定义一个友好的提示系统异常的页面。
在 src/main/resources 下创建 /public/error,在该目录下再创建一个名为 5xx.html 文件,该页面的内容就是当系统报错时返回给用户浏览的内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>系统错误</title>
<link href="/css/index.css" rel="stylesheet"/>
</head>
<body>
<div>
<h2>系统内部错误</h2>
</div>
</body>
</html>
路径时固定的,Spring Boot 会在系统报错时将返回视图指向该目录下的文件。
如下图:
[图片上传失败...(image-5f24a2-1524637491856)]
上边处理的 5xx 状态码的问题,接下来解决 404 状态码的问题。
当出现 404 的情况时,用户浏览的页面也不够友好,因此我们也需要自定义一个友好的页面给用户展示。
在 /public/error 目录下再创建一个名为 404.html 的文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>访问异常</title>
<link href="/css/index.css" rel="stylesheet"/>
</head>
<body>
<div>
<h2>找不到页面</h2>
</div>
</body>
</html>
我们请求一个不存在的资源,如:http://localhost:8080/fastjson/test2,结果如下图:
[图片上传失败...(image-3be006-1524637491856)]
全局异常捕获
如果项目前后端是通过 JSON 进行数据通信,则当出现异常时可以常用如下方式处理异常信息。
编写一个类充当全局异常的处理类,需要使用 @ControllerAdvice 和 @ExceptionHandler 注解:
[图片上传失败...(image-f92646-1524637491856)]
其中,方法名为任意名,入参一般使用 Exception 异常类,方法返回值可自定义。
启动项目,访问 http://localhost:8080/fastjson/test,结果如下图:
[图片上传失败...(image-b11c78-1524637491856)]
我们还可以自定义异常,在全局异常的处理类中捕获和判断,从而对不同的异常做出不同的处理。
文件上传和下载
添加依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
实现
public class FileInfo {
private String path;
public FileInfo(String path) {
this.path = path;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
[图片上传中...(image-214f96-1524637491856-1)]
基本上都是在学习 javaweb 时用到的 API。
文件上传测试结果如下图: