简单的返回信息结果封装+统一异常处理

一、返回信息结果封装

  • 前后端分离的基本接口返回封装,code默认200,异常就设置SC_INTERNAL_SERVER_ERROR500(因为是前端整权限)
  • 最后判断结果judgeResult写操作都是返回数字都懂
public class HttpResult {

    private int code = 200;
    private String msg;
    private Object data;
    //getter、setter省略
    
	public static HttpResult error() {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
    }

    public static HttpResult error(String msg) {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    }

    public static HttpResult error(String scInternalServerError, String msg) {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    }

    public static HttpResult error(int code, String msg) {
        HttpResult result = new HttpResult();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    public static HttpResult error(String msg, Object data) {
        HttpResult result = new HttpResult();
        result.setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
        result.setMsg(msg);
        result.setData(data);
        return result;
    }

    public static HttpResult ok(String msg) {
        HttpResult result = new HttpResult();
        result.setMsg(msg);
        return result;
    }

    public static HttpResult ok(Object data) {
        HttpResult result = new HttpResult();
        result.setData(data);
        return result;
    }

    public static HttpResult ok(String msg, Object data) {
        HttpResult result = new HttpResult();
        result.setMsg(msg);
        result.setData(data);
        return result;
    }

    public static HttpResult ok() {
        return new HttpResult();
    }

    public static HttpResult judgeResult(Object o) {
        Integer judge = 0;
        if (ObjectUtils.anyNull(o)) {
            judge = 0;
        } else if (o instanceof Integer) {
            judge = (Integer) o;
        }
        return judge > 0 ? ok("操作成功", judge) : error("操作失败", judge);
    }
}

二、统一异常处理

  • 定义GlobalExceptionHandler,标注@RestControllerAdvice(与@ControllerAdvice类似,差别如@RestController和@Controller
  • @ControllerAdvice

@ControllerAdvice是一个@Component,用于定义@ExceptionHandler@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。
一般就使用@ExceptionHandler

@RestControllerAdvice
public class GlobalExceptionHandler {
	@ExceptionHandler(ApplicationRunException.class)
    public HttpResult baseException(ApplicationRunException e) {
        return HttpResult.error(e.getMessage());
    }
}
  • 这里处理自定义的异常信息封装ApplicationRunException(继承自RuntimeException
  • 继承RuntimeException与Exception差别:

继承RuntimeException
1、当我们捕获ApplicationRunException异常时,不用在方法外额外的throws
2、捕获的方法被注解时,RuntimeException不会报错,·Exception·会报错

  • ApplicationRunException的用途:即throw new ApplicationRunException ()时,给的参数将被我们作为msg返回
public class ApplicationRunException extends RuntimeException {

    private String code;
    private String message;
    private Exception e;
    // 看了上面的用途,可以知道我们只要定义简单的getter方法(省略)
    //和一些有、无参构造
    public ApplicationRunException() {
        this.code = null;
        this.message = null;
        this.e = null;
    }

    public ApplicationRunException(String message) {
        this.message = message;
    }
}
  • 自定义异常方法处理使用:

只需要在实现方法中throw new ApplicationRunException ()
这一步会帮我们,直接拦截下正确的返回,转而走GlobalExceptionHandler中的baseException返回HttpResult.error(e.getMessage());(这样我们的控制器只需要用到HttpResult.ok()
然后在controller控制器返回我们的HttpResult即可

那么,就到这里\(^o^)/~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值