springboot怎么返回404_springboot异常处理之404
源码分析
在springboot中默认有一个异常处理器接口ErrorContorller,该接口提供了getErrorPath()方法,此接口的BasicErrorController实现类实现了getErrorPath()方法,如下:
/*
* AbstractErrorController是ErrorContoller的实现类
*/
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class BasicErrorController extends AbstractErrorController {
private final ErrorProperties errorProperties;
...
@Override
public String getErrorPath() {
return this.errorProperties.getPath();
}
@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
HttpStatus status = getStatus(request);
Map model = Collections
.unmodifiableMap(getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));
response.setStatus(status.value());
ModelAndView modelAndView = resolveErrorView(request, response, status, model);
return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);
}
@RequestMapping
public ResponseEntity> error(HttpServletRequest request) {
HttpStatus status = getStatus(request);
if (status == HttpStatus.NO_CONTENT) {
return new ResponseEntity<>(status);
}
Map body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
return new ResponseEntity<>(body, status);
}
....
}
errorProperties类定义如下:
public class ErrorProperties {
/**
* Path of the error controller.
*/
@Value("${error.path:/error}")
private String path = "/error";
...
}
由此可见,springboot中默认有一个处理/error映射的控制器,有error和errorHtml两个方法的存在,它可以处理来自浏览器页面和来自机器客户端(app应用)的请求。
当用户请求不存在的url时,dispatcherServlet会交由ResourceHttpRequestHandler映射处理器来处理该请求,并在handlerRequest方法中,重定向至/error映射,代码如下:
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// For very general mappings (e.g. "/") we need to check 404 first
Resource resource = getResource(request);
if (resource == null) {
logger.debug("Resource not found");
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404
return;
}
...
}
getResource(request)会调用this.resolverChain.resolveResource(request, path, getLocations())方法,getLocations()方法返回结果如下:
接着程序会执行到getResource(pathToUse, location)方法如下:
@Nullable
protected Resource getResource(String resourcePath, Resource location) throws IOException {
// 新建一个resource对象,url为 location + resourcePath,判断此对象(文件)是否存在
Resource resource = location.createRelative(resourcePath);
if (resource.isReadable()) {
if (checkResource(resource, location)) {
return resource;
}
else if (logger.isWarnEnabled()) {
Resource[] allowedLocations = getAllowedLocations();
logger.warn("Resource path \"" + resourcePath + "\" was successfully resolved " +
"but resource \"" + resource.getURL() + "\" is neither under the " +
"current location \"" + location.getURL() + "\" nor under any of the " +
"allowed locations " + (allowedLocations != null ? Arrays.asList(allowedLocations) : "[]"));
}
}
return null;
}
在resource.isReadable()中,程序会在locations目录中寻找path目录下文件,由于不存在,返回null。
最终也就导致程序重定向至/error映射,如果是来自浏览器的请求,也就会返回/template/error/404.html页面,所以对于404请求,只需要在template目录下新建error目录,放入404页面即可。
使用注意在springboot4.x中我们可以自定义ControllerAdvice注解 + ExceptionHandler注解来助理不同错误类型的异常,但在springboot中404异常和拦截器异常由spring自己处理。
springboot怎么返回404_springboot异常处理之404相关推荐
- springboot怎么返回404_SpringBoot(二十)_404返回统一异常处理结果
1.修改application.properties文件# 自定义404 #出现错误时, 直接抛出异常 spring.mvc.throw-exception-if-no-handler-found=t ...
- springboot怎么返回404_深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?...
简介 日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用try ,catch的方式处理异常或者throw,throws的方式抛出异常不管.这种方法对于程序员来说处理也比较麻烦, ...
- springboot整合之统一异常处理
特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响. springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 ...
- springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常
springboot 接口返回数据时 net.sf.json.JSONNull["empty"]) 异常 参考文章: (1)springboot 接口返回数据时 net.sf.js ...
- springboot aop + logback + 统一异常处理 打印日志
springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...
- 怎么返回404_seo如果出现404页面怎么办?如何解决?
seo如果出现404页面怎么办?如何解决?很多人对于404页面都司空见惯了,但是要如何找出404错误呢?如何解决呢?下面聚名网小编就为大家介绍一下404页面对于seo是什么. seo如果出现404页面 ...
- SpringBoot开发案例之异常处理并邮件通知
SpringBoot开发案例之异常处理并邮件通知 参考文章: (1)SpringBoot开发案例之异常处理并邮件通知 (2)https://www.cnblogs.com/lywJ/p/1107696 ...
- SpringBoot统一返回处理出现cannot be cast to java.lang.String异常
SpringBoot统一返回处理出现cannot be cast to java.lang.String异常 一 问题出现背景: 二 解决方案 三 异常原因分析 原因: 源码详细分析: 正常返回: 返 ...
- php页面会返回状态200,服务器404错误页面http状态返回值为200的原因解析
今天在网上找了很多关于404页面的相关资料,目的就是为了吃透关于404的一些知识. 登陆google管理工具后台,发现网站未验证,并提示:我们检测到您的 404(找不到文件)错误页在标头中返回了 20 ...
- 关于SpringBoot如何返回视图
关于SpringBoot 如何返回一个视图页面(例如JSP) 首先需要在配置文件中配置这一段 spring: mvc: view: prefix: /pages/ ...
最新文章
- innobackupex --rsync 报错 Error: can't create file (null)/xtrabackup_rsyncfiles_pass1
- 【mysq】远程访问权限(允许远程连接)
- 王思聪怒了!大众点评紧急道歉:相关账户已冻结
- html5设计app数据js库,12个流行的HTML5 JS图形绘制库
- 初学python之路-day15
- windows error错误代码
- GraphLab:新的面向机器学习的并行框架
- Spring Boot框架从入门到精通
- 测试用例入门(二) - 使用等价类划分法编写测试用例
- Air722UG_模块硬件设计手册_V1.1
- Java一步到位!彻底了解JDK、JRE、JVM分别是什么及它们之间的联系
- 【韩语图片文字识别】如何快速识别韩语图片文字,将文字变成电子档,进行翻译处理教程
- 打造爆款关键词选择10种方法
- 15种手机游戏引擎和开发工具介绍
- 阿里云服务器对企业有什么用?
- UG\NX二次开发 菜鸟欢乐多
- 2018 年 5 月
- 点云编码是计算机视觉吗,本周新出开源计算机视觉代码汇总(含图像超分辨、视频目标分割、行人重识别、点云识别等)...
- 百斗度输入法linux,爪哇语输入法
- 学习LabVIEW应看的几本书
热门文章
- 科技未来 | 计算机芯片如何拥有嗅觉?
- 【softmax分类】基于matlab梯度下降softmax回归minist数据分类【含Matlab源码 1645期】
- 【优化算法】多目标利希滕贝格算法(MOLA)【含Matlab源码 1434期】
- 【雷达通信】基于matlab CDIF算法雷达信号分选【含Matlab源码 1186期】
- 【数字信号调制】基于matlab二进制数字振幅调制与解调(2ASK)【含Matlab源码 996期】
- python unpack_Python使用struct处理二进制(pack和unpack用法)
- Noodle.ai的Atlas机器学习(ML)框架第1部分:构建AI应用程序面临的挑战
- 端到端车道线检测_弱监督对象检测-端到端培训管道
- python dict()函数的奇异之处
- mysql查看enum和set值_mysql中的enum和set类型_MySQL