Spring Boot 处理异常返回json

Posted --- 锅老官扎起哦!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 处理异常返回json相关的知识,希望对你有一定的参考价值。

spring boot 老版本处理异常  对于浏览器客户端,返回error数据

对于非浏览器返回json数据, 主要取决于你的请求head 是什么 

但是当我们自定义了:  老版本无论请求什么都会返回json异常数据,

@ControllerAdvice
public class UserExceptionHandler {

    @ResponseBody
    @ExceptionHandler(UserNotFoundExits.class)
    public Map<String, Object> handleException(Exception e){
        Map<String,Object> map = new HashMap<>();
        map.put("code","user.notexist");
        map.put("message",e.getMessage());
        return map;
    }
}

 通过阅读源码, 新版本的异常处理 就是我们上面强制定义了 异常处理类 ,也会按照 浏览器返回error ,客户端返回json 

    @RequestMapping(
        produces = {"text/html"}
    )
    public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
        HttpStatus status = this.getStatus(request);
        Map<String, Object> model = Collections.unmodifiableMap(this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.TEXT_HTML)));
        response.setStatus(status.value());
        ModelAndView modelAndView = this.resolveErrorView(request, response, status, model);
        return modelAndView != null ? modelAndView : new ModelAndView("error", model);
    }

    @RequestMapping
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        HttpStatus status = this.getStatus(request); // 此处做了更改
        if (status == HttpStatus.NO_CONTENT) {
            return new ResponseEntity(status);
        } else {
            Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL));
            return new ResponseEntity(body, status);
        }
    }

 

以上是关于Spring Boot 处理异常返回json的主要内容,如果未能解决你的问题,请参考以下文章

测试开发专题:spring-boot自定义异常返回

Spring Boot 使用来自服务器响应的数据编辑 json 异常

知识点-Spring Boot 统一异常处理汇总

springboot 异常注解

Spring Boot 从异常处理程序返回 401 状态自定义对象

分享spring boot controller统一日志代码