springboot-errorhandler

Spring boot

springboot能快速的构建项目,各个模块逻辑很清晰,需要用的引入jar包就能使用,官网的资料也很充足,用起来特别上手。所以之后的小项目基本上都会用springboot框架。

异常处理

springboot默认出现异常返回一个默认的页面,有点丑,而且不能处理ajax异步请求的异常,比方说404。
写这个文章是为了记录下自己学习过程中遇到的问题,做个笔记,顺带分享一下,有问题的欢迎指出来。
这里分享下springboot官网文档的地址:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

文档中指出可以使用多种方式处理异常。这里举两个例子:

@ControllerAdvice

package com.fruitday.controller;

import javax.servlet.http.HttpServletRequest;

import org.jboss.logging.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException;
/**
 * ControllerAdvice 可通过 annotations(), basePackageClasses(), basePackages() 选择控制器子集
 * annotations=Controller.class  只对声明为Controller的控制器生效。
 * @author cxx
 */
@ControllerAdvice(annotations=Controller.class)
public class ExceptionHandlerController{
static Logger log = Logger.getLogger(ExceptionHandlerController.class);
/**
 * 处理所有抛出来的异常
 * @param ex
 * @param request
 * @return
 */
@ExceptionHandler(Exception.class)
public String handlerAll(Exception ex, HttpServletRequest request) {
     log.error(ex.getMessage(), ex);
    request.setAttribute("errorTips", ex.getMessage());
    request.setAttribute("ex", ex);
    return "error/sysError";
}   
/**
 * 处理 NoHandlerFoundException 类型的异常
 * @param ex
 * @param request
 * @return
 */
@ExceptionHandler(NoHandlerFoundException.class)
public String handlerNoFound(NoHandlerFoundException ex, HttpServletRequest request) {
    log.error(ex.getMessage(), ex);
    request.setAttribute("errorTips", ex.getMessage());
    return "error/404";
}   


}

可以根据异常类型通过@ExceptionHandler(XXX.class)声明不同的异常处理器.

但是要想处理ajax异步请求的404错误,还需要让DispatchServlet在遇到404时抛出异常,以便被handlerNoFound捕获。

application.properties中添加

spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

第一行是找不到处理器时抛出异常。
第二行是解决静态文件404时抛nullpoint异常。

ErrorController

声明一个Controller并实现ErrorController。

@Controller
public class ExceptionHandlerController implements ErrorController{

        private static final String ERROR_PATH ="/error";

        @RequestMapping(value=ERROR_PATH)
        public String handlerException(HttpServletResponse res){
            System.out.println(res.getStatus());
            return "/error/404";    
        }

        @Override
        public String getErrorPath() {
            // TODO Auto-generated method stub
            return ERROR_PATH;
        }   

}

实现接口方法 getErrorPath(),返回异常时的重定向路径。
再声明一个@RequestMapping来处理这个重定向。传入参数为Response,以便获取status,再根据status返回不同的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,可以通过自定义错误处理器(ErrorHandler)来处理应用程序中的异常和错误。错误处理器允许您捕获和处理应用程序中的异常,并返回适当的响应。 以下是在Spring Boot中实现错误处理器的一般步骤: 1. 创建一个类,实现Spring的`ErrorController`接口。例如: ```java import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class CustomErrorController implements ErrorController { @RequestMapping("/error") public ResponseEntity<String> handleError() { // 处理异常逻辑 // 返回适当的响应,例如错误消息或自定义错误页面 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Something went wrong!"); } @Override public String getErrorPath() { return "/error"; } } ``` 2. 在`application.properties`或`application.yml`文件中配置错误路径。例如: ```properties server.error.path=/error ``` 3. 可以根据需要自定义错误处理器的逻辑。在上面的示例中,我们只是返回了一个简单的错误消息和500状态码作为示例。 请注意,这只是一个基本示例,您可以根据自己的需求进行自定义。您还可以使用`@ControllerAdvice`和`@ExceptionHandler`注释来处理特定类型的异常,并返回适当的响应。 希望这可以帮助到您!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值