SpringBoot接口服务处理Whitelabel Error Page
2017-09-18 09:56
666 查看
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50915979
《SpringBoot接口服务处理Whitelabel Error Page》
《Maven依赖加载错误的情况分析》
《Java Web工程转换为基于Maven的Web工程》
《Maven Web工程运行异常:Maven.multiModuleProjectDirectory system propery is not set的问题》
《Maven运行异常:Exception in thread “main” java.lang.UnsupportedClassVersionError》
举例,定义有效接口地址如:http://ip/user,
http://ip/age。则其它地址均为无效地址,若请求则返回上述Whitelabel Error Page页面。
这个类实现了ErrorController接口,用来处理请求的各种异常。其中定义了一个greeting的html模版,用来显示返回结果。初始化此类模版需要在pom中加入以下依赖:
这个依赖主要是给SpringBoot中加载html等类型的模版服务。其支持的模版类型如下:
SpringBoot项目配置模版路径的方法如下:
1、在main的resources路径下新建templates文件夹
2、在templates文件夹中新建模版文件greeting.html
《SpringBoot接口服务处理Whitelabel Error Page》
《Maven依赖加载错误的情况分析》
《Java Web工程转换为基于Maven的Web工程》
《Maven Web工程运行异常:Maven.multiModuleProjectDirectory system propery is not set的问题》
《Maven运行异常:Exception in thread “main” java.lang.UnsupportedClassVersionError》
1.0 异常说明
SpringBoot搭建的接口服务,如果请求非注册类的无效接口地址,则返回该页面。主要问题就是没有对异常请求做处理。举例,定义有效接口地址如:http://ip/user,
http://ip/age。则其它地址均为无效地址,若请求则返回上述Whitelabel Error Page页面。
2.0 异常处理
主要是添加一个AppErrorController的Controller类,这里我定义了异常返回页面。package com.autonavi.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.ErrorAttributes; import org.springframework.boot.autoconfigure.web.ErrorController; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.servlet.ModelAndView; /** * <p>Author: loongshawn * <p>Date: 16-03-17 * <p>Version: 1.0 */ @Controller public class AppErrorController implements ErrorController{ private static final Logger logger = LoggerFactory.getLogger(AppErrorController.class); private static AppErrorController appErrorController; /** * Error Attributes in the Application */ @Autowired private ErrorAttributes errorAttributes; private final static String ERROR_PATH = "/error"; /** * Controller for the Error Controller * @param errorAttributes * @return */ public AppErrorController(ErrorAttributes errorAttributes) { this.errorAttributes = errorAttributes; } public AppErrorController() { if(appErrorController == null){ appErrorController = new AppErrorController(errorAttributes); } } /** * Supports the HTML Error View * @param request * @return */ @RequestMapping(value = ERROR_PATH, produces = "text/html") public ModelAndView errorHtml(HttpServletRequest request) { return new ModelAndView("greeting", getErrorAttributes(request, false)); } /** * Supports other formats like JSON, XML * @param request * @return */ @RequestMapping(value = ERROR_PATH) @ResponseBody public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request)); HttpStatus status = getStatus(request); return new ResponseEntity<Map<String, Object>>(body, status); } /** * Returns the path of the error page. * * @return the error path */ @Override public String getErrorPath() { return ERROR_PATH; } private boolean getTraceParameter(HttpServletRequest request) { String parameter = request.getParameter("trace"); if (parameter == null) { return false; } return !"false".equals(parameter.toLowerCase()); } private Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) { RequestAttributes requestAttributes = new ServletRequestAttributes(request); Map<String, Object> map = this.errorAttributes.getErrorAttributes(requestAttributes,includeStackTrace); String URL = request.getRequestURL().toString(); map.put("URL", URL); logger.debug("AppErrorController.method [error info]: status-" + map.get("status") +", request url-" + URL); return map; } private HttpStatus getStatus(HttpServletRequest request) { Integer statusCode = (Integer) request .getAttribute("javax.servlet.error.status_code"); if (statusCode != null) { try { return HttpStatus.valueOf(statusCode); } catch (Exception ex) { } } return HttpStatus.INTERNAL_SERVER_ERROR; } }
这个类实现了ErrorController接口,用来处理请求的各种异常。其中定义了一个greeting的html模版,用来显示返回结果。初始化此类模版需要在pom中加入以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
这个依赖主要是给SpringBoot中加载html等类型的模版服务。其支持的模版类型如下:
Template modes: [THYMELEAF] * XHTML [THYMELEAF] * XML [THYMELEAF] * HTML5 [THYMELEAF] * LEGACYHTML5 [THYMELEAF] * VALIDXHTML [THYMELEAF] * VALIDXML
SpringBoot项目配置模版路径的方法如下:
1、在main的resources路径下新建templates文件夹
2、在templates文件夹中新建模版文件greeting.html
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Error Pages</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p th:text="'Url:' + ${URL}" /> <p th:text="'Error:' + ${error}" /> <p th:text="'Status:' + ${status}" /> <p th:text="'Timestamp:' + ${timestamp}" /> </body> </html>
3.0 处理结果
无效请求地址均会返回此页面,只是其中的返回值不同。相关文章推荐
- SpringBoot接口服务处理Whitelabel Error Page
- java处理springboot whitelabel error page
- SpringBoot接口服务处理Whitelabel Error Page
- Spring Boot自定义错误页面,Whitelabel Error Page处理方式
- Spring Boot自定义错误页面,Whitelabel Error Page处理方式
- SpringBoot接口服务处理Whitelabel Error Page
- Spring Boot : Whitelabel Error Page解决方案
- Spring boot JSP访问页面显示Whitelabel Error Page
- spring boot: Whitelabel Error Page的解决方案
- 初学 Spring boot 报错 Whitelabel Error Page 404
- springboot启动报错:whitelabel error page
- SpringBoot 不显示Whitelabel Error Page
- 搭建Spring Boot框架 Whitelabel Error Page This application has no explicit mapping for /error, so you ar
- spring-boot集成 jsp报whitelabel error page的问题解决
- spring-boot Whitelabel Error Page
- springboot + tomcat + jsp 报Whitelabel Error Page解决方法
- Whitelabel Error Page(按spring-boot官网的示例跑不起来的原因之一)
- spring boot: Whitelabel Error Page的解决方案
- springboot常见错误——Whitelabel Error Page
- spring-boot jsp whitelabel error page问题解决