springboot全局异常处理BasicErrorController和RestControllerAdvice

简介: springboot全局异常处理BasicErrorController和RestControllerAdvice
RestControllerAdvice
@RestControllerAdvice
public class ExceptionHandlerAdvice {

    @ExceptionHandler(value = ToolBoxException.class)
    public Ret<String> doBaseApiException(ToolBoxException e) {
        return Rets.failure(e.getMessage());
    }

}

BasicErrorController
package com.ityu.bean.exception;


import com.ityu.bean.enumeration.BizExceptionEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

@Controller
@Slf4j
public class AppErrorController extends BasicErrorController {
    public AppErrorController(ServerProperties errorAttributes) {
        super(new DefaultErrorAttributes(), errorAttributes.getError());
    }

    /**
     * 覆盖默认的Json响应
     */
    @Override
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        Map<String, Object> body = getErrorAttributes(request,
                isIncludeStackTrace(request, MediaType.ALL));
        HttpStatus status = getStatus(request);
        //输出自定义的Json格式
        Map<String, Object> map = new HashMap<>();
        String msg = body.get("message") + "";
        if (msg.equals(BizExceptionEnum.TOKEN_INVALID.getMessage())) {
            map.put("code", BizExceptionEnum.TOKEN_INVALID.getCode());
        } else {
            map.put("code", -1);
        }
        map.put("msg", msg);
        map.put("status", true);
        map.put("data", "");
        //log.error(String.valueOf(StringUtil.getStrValue(request)));
        return new ResponseEntity<>(map, HttpStatus.valueOf(200));

        // return new ResponseEntity<>(map, status);
    }

    /**
     * 覆盖默认的HTML响应
     */
    @Override
    public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
        //请求的状态
        HttpStatus status = getStatus(request);
        response.setStatus(getStatus(request).value());

        Map<String, Object> model = getErrorAttributes(request,
                isIncludeStackTrace(request, MediaType.TEXT_HTML));
        ModelAndView modelAndView = resolveErrorView(request, response, status, model);
        //指定自定义的视图
        return (modelAndView == null ? new ModelAndView("error", model) : modelAndView);
    }
}

ResponseBodyAdvice
@RestControllerAdvice
public class ApiResBodyAdvice implements ResponseBodyAdvice {

    /**
     * 判断哪些需要拦截
     **/
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    /**
     * 拦截返回数据处理
     */
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                                  Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {

        //处理扩展字段
        return ApiResBodyAdviceKit.beforeBodyWrite(body);
    }

}
相关文章
|
10月前
|
缓存 前端开发 Java
SpringBoot&SpringMVC统一异常处理之RestControllerAdvice
SpringBoot&SpringMVC统一异常处理之RestControllerAdvice
64 0
|
2月前
|
Java
SpringBoot全局异常@RestControllerAdvice全局异常
SpringBoot全局异常@RestControllerAdvice全局异常
16 0
|
11月前
|
前端开发 Java
Springboot简单利用@RestControllerAdvice优雅的捕获异常
Springboot简单利用@RestControllerAdvice优雅的捕获异常
68 0
|
数据采集 前端开发 Java
SpringBoot使用@RestControllerAdvice无侵入返回统一结果包装
SpringBoot使用@RestControllerAdvice无侵入返回统一结果包装
398 0
|
Java Spring
SpringBoot 定义全局捕获异常类 @RestControllerAdvice 注解
SpringBoot 定义全局捕获异常类 @RestControllerAdvice 注解
389 0
SpringBoot 定义全局捕获异常类 @RestControllerAdvice 注解
|
20小时前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高校奖助学金系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高校奖助学金系统的详细设计和实现(源码+lw+部署文档+讲解等)
15 2
|
20小时前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高校失物招领平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高校失物招领平台的详细设计和实现(源码+lw+部署文档+讲解等)
11 2
|
20小时前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校社团管理小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校社团管理小程序的详细设计和实现(源码+lw+部署文档+讲解等)
9 1
|
20小时前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高校知识产权信息服务平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高校知识产权信息服务平台的详细设计和实现(源码+lw+部署文档+讲解等)
12 1
|
20小时前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高校洗浴管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高校洗浴管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
12 1