springboot 配置全局响应数据_SpringBoot 全局异常配置

在日常web开发中发生了异常,往往是需要通过一个统一的异常处理来保证客户端能够收到友好的提示。

一、默认异常机制

默认异常处理(SpringBoot 默认提供了两种机制,一种是针对于web浏览器访问的错误页面响应,另一种则是针对于 接口测试工具等 的参数响应处理):

原理:SpringBoot默认提供了程序出错的结果映射路径/error。这个/error请求会在BasicErrorController中处理,其内部是通过判断请求头中的Accept的内容是否为text/html来区分请求是来自客户端浏览器(浏览器通常默认自动发送请求头内容Accept:text/html)还是客户端接口的调用,以此来决定返回页面视图还是 JSON 消息内容。

二、自定义json格式异常响应

通过 @ControllerAdvice/@RestControllerAdvice 和 @ExceptionHandler 注解全局异常自定义响应类

首先定义响应状态码枚举类

public enum ResultCode {

SUCCESS(200),//成功

FAIL(400),//失败

UNAUTHORIZED(401),//未认证(签名错误)

NOT_FOUND(404),//接口不存在

INTERNAL_SERVER_ERROR(500);//服务器内部错误

private final int code;

ResultCode(int code) {

this.code = code;

}

public int code() {

return code;

}

}

定义 响应类

public class Result {

/**

* 状态响应码

*/

private int code;

/**

* 响应结果 成功/失败

*/

private boolean success;

/**

* 响应信息

*/

private String message;

/**

* 响应数据

*/

@JsonInclude(JsonInclude.Include.NON_NULL)

private Object data;

public Result setCode(ResultCode resultCode) {

this.code = resultCode.code();

return this;

}

public int getCode() {

return code;

}

public boolean isSuccess() {

return success;

}

public Result setSuccess(boolean success) {

this.success = success;

return this;

}

public String getMessage() {

return message;

}

public Result setMessage(String message) {

this.message = message;

return this;

}

public Object getData() {

return data;

}

public Result setData(Object data) {

this.data = data;

return this;

}

}

对响应结果封装,做预处理

public class ResultGenerator {

private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";

public static Result genSuccessResult() {

return new Result()

.setCode(ResultCode.SUCCESS)

.setSuccess(true)

.setMessage(DEFAULT_SUCCESS_MESSAGE);

}

public static Result genSuccessResult(Object data) {

return new Result()

.setCode(ResultCode.SUCCESS)

.setSuccess(true)

.setMessage(DEFAULT_SUCCESS_MESSAGE)

.setData(data);

}

public static Result genFailResult(String message) {

return new Result()

.setCode(ResultCode.FAIL)

.setSuccess(false)

.setMessage(message);

}

}

异常处理类

@RestControllerAdvice

public class ExceptionControllerAdvice {

@ExceptionHandler(Exception.class)

public Result jsonErrorHandler(HttpServletRequest req, Exception e){

return ResultGenerator.genFailResult(e.getMessage());

}

}

三、自定义异常处理页面

在templates下新建error.html页面

做错误页面异常处理 返回 ModelAndView

@ExceptionHandler(Exception.class)

public Object handleException(Exception e){

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("msg", e.getMessage());

modelAndView.addObject("url", req.getRequestURL());

modelAndView.addObject("stackTrace", e.getStackTrace());

modelAndView.setViewName("error");

return modelAndView;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值