springboot-统一异常

模拟异常不做全局统一异常时,当项目中出现异常,会报500.如:@PostMapping(value="/testerror")@ApiOperation(value = "获取用户信息")public Result.Base testerror(HttpServletRequest request){Integer inte = 1/0;return new Resul...
摘要由CSDN通过智能技术生成
  1. 模拟异常

不做全局统一异常时,当项目中出现异常,会报500.

如:

@PostMapping(value="/testerror")
@ApiOperation(value = "获取用户信息")
public Result.Base testerror(HttpServletRequest request){
    Integer inte = 1/0;
    return new Result.Success<>(inte);
}

访问接口时报500错误:

2.处理异常

利用@ControllerAdvice@ExceptionHandler定义一个统一异常处理类

  • @ControllerAdvice:控制器增强,使@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。
  • @ExceptionHandler:异常处理器,此注解的作用是当出现其定义的异常时进行处理的方法

因此只需要添加如下类即可:

如果是自定义异常,可单独再配。

 

package com.wps.education.exception;

import com.wps.education.LoginInterceptor.LoginInterceptor;
import com.wps.education.common.response.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@ControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result.Base jsonErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        logger.error("{} | {}", req.getRequestURL().toString(), e.getMessage());
        e.printStackTrace();
        return new Result.ErrorData<>(e.getMessage());
    }
}

接口返回:

后台输出:

3.项目级处理方式

上面的例子可以全局处理异常,并返回错误内容。

但在项目中使用时,不能给用户显示500,也不能显示这些错误内容。而是定义一套错误码,后台统一返回格式,前端处理接口中的错误码,给出相应的业务处理,或更合理的提示信息。

  1. 定义errorcode类:

import org.apache.http.HttpStatus;
/**
 * 定义错误类
 */
public abstract class ErrorCode {

    /**
     3.1 code:0表示成功, -1表示未知错误
     3.1 系统集合(1-99):
     3.4 业务相关code集合 (100-399):
     */

/** 成功 */
public static final Integer SUCCESS = 0;
/** 未知 */
public static final Integer UNKNOWN = -1;

/** 未知错误 */
public static final Result.Error ERROR_UNKNOWN = new Result.Error(UNKNOWN, "unknown error", HttpStatus.SC_INTERNAL_SERVER_ERROR);

/** system error code, 1-99 */
/** 参数错误,不正确的参数 */
public static final Result.Error ARGUMENT_INVALID = new Result.Error(1, "parameter is invalid", HttpStatus.SC_BAD_REQUEST);
/** 没有Token */
public static final Result.Error NO_TOKEN_ERROR = new Result.Error(2, "no token error", HttpStatus.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值