SpringBoot 错误页面跳转方式

网友投稿 366 2022-08-27


SpringBoot 错误页面跳转方式

目录SpringBoot错误页面跳转一、新增配置类二、错误页面跳转控制器SpringBoot自定义错误页面一、错误页面二、处理过程

SpringBoot错误页面跳转

SpringBoot实现MVC 404、500等错误时跳转自定义页面

一、新增配置类

package com.study.demo.codlTvrInfig;

import org.springframework.boot.web.server.ErrorPage;

import org.springframework.boot.web.server.ErrorPageRegistrar;

import org.springframework.boot.web.server.ErrorPageRegistry;

import org.springframework.http.HttpStatus;

import org.springframework.stereotype.Component;

/**

* 错误页面的配置

*/

@Component

public class ErrorPageConfig implements ErrorPageRegistrar {

@Override

public void registerErrorPages(ErrorPageRegistry registry) {

ErrorPage error400Page = new ErrorPage(HttpStatus.BAD_REQUEST, "/errorPageController/error_400");

ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/errorPageController/error_401");

ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/errorPageController/error_404");

ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/errorPageController/error_500");

registry.addErrorPages(error400Page,error401Page,error404Page,error500Page);

}

}

二、错误页面跳转控制器

package com.study.demo.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping("/errorPageController")

public class ErrorPageController {

@RequestMapping("/error_{errorCode}")

public String error(@PathVariable int errorCode){

String responseMsg;

switch (errorCode) {

case 400: responseMsg = "/400.html"; break;

case 401: responseMsg = "/401.html"; break;

case 404: responseMsg = "/404.html"; break;

case 500: responseMsg = "/500.html"; break;

default: responseMsg = "/404.html"; break;

}

return responseMsg;

}

}

SpringBoot自定义错误页面

一、错误页面

请求出现错误时,跳转到自定义的页面中,比如404,假如没对错误进行处理,那么系统默认的页面与项目的页面会有很大的不搭。

解决:在默认的静态路径下,新建error文件,里面放入错误页面,页面命名为错误状态码,如:404.html,也可以命名为4xx.html,但如果两个文件同时存在,那么会优先展示404.html

注:静态路径为

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{

"classpath:/META-INF/resources/",

"classpath:/resources/",

"classpath:/static/",

"classpath:/public/"

};

// 注:还有一个默认的根路径 "/"

二、处理过程

出现4xx或5xx错误时,ErrorPageCustomizer生效,就会来到/error请求,就会被BasicErrorController处理。

//在DefaultErrorViewResolver中有一段代码

// 处理4xx和5xx的请求

static {

Map views = new EnumMap(Series.class);

views.put(Series.CLIENT_ERROR, "4xx");

views.put(Series.SERVER_ERROR, "5xx");

SERIES_VIEWS = Collections.unmodifiableMap(views);

}

// 解析,并会跳转到error/错误状态码; 页面中

private ModelAndView resolve(String viewName, Map model) {

String errorViewName = "error/" + viewName;

TemplateAvailabilityProvider provider = this.templateAvailabilityProviders.getProvider(errorViewName, this.applicationContext);

// 对是否有模板引擎做出相应的视图处理

return provider != null ? new ModelAndView(errorViewName, model) : this.resolveResource(errorViewName, model);

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python小记——数组(array(一种扁平化序列而非容器序列))
下一篇:Python小记——可散列的数据类型(python 散列)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~