码迷,mamicode.com
首页 > 编程语言 > 详细

15、SpringBoot-CRUD错误处理机制(2)

时间:2019-02-09 00:55:37      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:draw   错误   自定义   pre   时间   bmc   bsd   dvb   ror   

二、如何定制错误响应

1).如何定义错误处理页面

1.1、有模板引擎的情况下;error/状态码; 
       【将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的error文件夹下】
        发生此状态码的错误就会来到 对应的页面;

   技术图片

        可以使用4xx、5xx作为错误页面的文件名来匹配这种类型的所有错误
        精确优先(优先寻找精确的状态码.html);

 

        页面能获取的信息( DefaultErrorAttributes)
            timestamp:时间戳
            status:状态码
            error:错误提示
            exception:异常对象
            message:异常消息
            errors:JSR303数据校验的错误都在这里

    技术图片

   技术图片

   技术图片

  

   1.2、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件下找
 
   1.3、默认以上两中都没有的时候,默认来到springboot的默认页面

   

 2)、定制json数据

 设置user异常

public class UserException extends RuntimeException {
    public UserException() {
        super("the user is not exist!");
    }
}

 

 

异常页面:

<h1>status:[[${status}]]</h1>
<h1>timestamp:[[${timestamp}]]</h1>
<h1>error:[[${error}]]</h1>
<h1>message:[[${message}]]</h1>

 如果此时浏览器访问报错:

技术图片

 

 其他客户端的访问:

 技术图片

 

2.1、自定义异常处理返回json数据
没有自适应效果
@ControllerAdvice
public class MyException  {
    @ResponseBody
    @ExceptionHandler(UserException.class)
    public Map<Object,String> userExc(Exception e){
        Map<Object,String> map = new HashMap<>();
        map.put("code","user.not.exist");
        map.put("message",e.getMessage());
        return map;
    }

}

其他客户端的访问:

技术图片

浏览器的访问:

 技术图片

 

2.2、转发到/error进行自适应响应效果处理
@ExceptionHandler(UserException.class)
public String userExc(Exception e){
    Map<Object,String> map = new HashMap<>();
    map.put("code","user.not.exist");
    map.put("message",e.getMessage());
    return "forward:/error";
}

 

其他客户端:

技术图片

浏览器:(此时是系统默认的处理页面)

 技术图片

在对代码进行改动

@ExceptionHandler(UserException.class)
public String userExc(Exception e, HttpServletRequest request){
    Map<Object,String> map = new HashMap<>();

    //传入我们自己的错误状态码  4xx  5xx
    //否则就不会进入定制错误页面的解析流程
    /**
     * Integer statusCode = (Integer) request
     .getAttribute("javax.servlet.error.status_code");
     */
    request.setAttribute("javax.servlet.error.status_code",400);

    //此时的数据是无法携带出去的
    map.put("code","user.not.exist");
    map.put("message",e.getMessage());
    return "forward:/error";
}
浏览器:(此时是自定义的错误页面)
技术图片技术图片
其他:
技术图片技术图片

 

15、SpringBoot-CRUD错误处理机制(2)

标签:draw   错误   自定义   pre   时间   bmc   bsd   dvb   ror   

原文地址:https://www.cnblogs.com/Mrchengs/p/10357010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!