28.Spring-Boot 1.5版错误处理2.0版错误处理有改动

       Spring Boot在默认情况下提供了一个/error,以合理的方式处理所有错误。它在servlet容器中注册为“全局”错误页面。对于机器客户机(类似ajax),它将生成一个JSON响应,其中包含错误的详细信息、HTTP状态和异常消息。对于浏览器客户端,有一个“whitelabel”错误视图,它以HTML格式呈现相同的数据(为了定制它只是添加了一个解析为“error”的视图)。要完全替换默认行为,您可以实现ErrorController并注册该类型的bean定义,或者简单地添加一个类型ErrorAttributes的bean来使用现有的机制,但要替换其中的内容

//ajax 返回json错误

{"timestamp":1527659553067,"status":500,"error":"InternalServer Error","exception":"com.niugang.exception.CheckException","message":"用户名不能为空","path":"/myweb/save"}

//浏览器请求 返回一个whitelabel视图

  提示:

    可以将BasicErrorController用作自定义ErrorController的基类。如果您想为一个新的内容类型添加一个处理程序,这一点特别有用(默认情况下是处理text/html,并为其他所有内容提供一个回退)。要做到这一点,只需扩展BasicErrorController,并添加一个带有生成属性的@RequestMapping的公共方法,并创建一个新类型的bean。【这点笔者尝试一直有问题】

推荐:通过@ControllerAdvice 返回定制的json错误文档,替换默认的。

1.自定义错误类型类



package com.niugang.exception;


public class CustomErrorType {
/**
* 状态码
*/
    private  int status;
    /**
     * 错误信息
     */
    private  String message;
    
public CustomErrorType(int status, String message) {
super();
this.status = status;
this.message = message;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
    
}

2.统一提示类 



package com.niugang.exception;

import javax.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

/**
 * 返回订制的json文档错误
 * 对于javaweb中
 * @author niugang
 *
 */
@ControllerAdvice
public class ControllerAdviceException extends ResponseEntityExceptionHandler {

@ExceptionHandler({CheckException.class,RuntimeException.class})
@ResponseBody
ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
HttpStatus status = getStatus(request);
//返回格式
               //{"status":500,"message":"用户名不能为空"} 最终返回的格式
return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status);

}

     private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
}

 

推荐:自定义错误页面

如果您想为给定的状态代码显示一个自定义的HTML错误页面,您可以向/error文件夹中添加一个文件。

src/
+- main/
+- java/
| + <source code>
+- resources/
    +- public/    默认存放静态文件,文件夹
       +- error/   必须有的文件下,springboot默认的error.html文件就是在error文件夹下的

          | +- 404.html

          | +- 500.html

+- <other public assets>

对于以上所有基于浏览器的请求,当出现404时,就是跳转到404.html页面,出现500错误时,就会跳转到500.html页面。

 

微信公众号               

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【2021年,将Spring全家桶的课程进行Review,确保不再有课程的顺序错乱,从而导致学员看不懂。进入2022年,将Spring的课程进行整理,整理为案例精讲的系列课程,并开始加入高阶Spring Security等内容,一步步手把手教你从零开始学会应用Spring,课件将逐步进行上传,敬请期待!】 本课程是Spring全家桶系列课程的第三部分Spring Boot,Spring案例精讲课程以真实场景、项目实战为导向,循序渐进,深入浅出的讲解Java网络编程,助力您在技术工作中更进一步。 本课程聚焦Spring Boot核心知识点:整合Web(如:JSP、Thymeleaf、freemarker等的整合)的开发、全局异常处理、配置文件的配置访问、多环境的配置文件设置、日志Logback及slf4j的使用、国际化设置及使用, 并在最后以一个贯穿前后台的Spring Boot整合Mybatis的案例为终奖,使大家快速掌握Spring的核心知识,快速上手,为面试、工作都做好充足的准备。 由于本课程聚焦于案例,即直接上手操作,对于Spring的原理等不会做过多介绍,希望了解原理等内容的需要通过其他视频或者书籍去了解,建议按照该案例课程一步步做下来,之后再去进一步回顾原理,这样能够促进大家对原理有更好的理解。 【通过Spring全家桶,我们保证你能收获到以下几点】 1、掌握Spring全家桶主要部分的开发、实现2、可以使用Spring MVC、Spring Boot、Spring Cloud及Spring Data进行大部分的Spring开发3、初步了解使用微服务、了解使用Spring进行微服务的设计实现4、奠定扎实的Spring技术,具备了一定的独立开发的能力  【实力讲师】 毕业于清华大学软件学院软件工程专业,曾在Accenture、IBM等知名外企任管理及架构职位,近15年的JavaEE经验,近8年的Spring经验,一直致力于架构、设计、开发及管理工作,在电商、零售、制造业等有丰富的项目实施经验  【本课程适用人群】如果你是一定不要错过!  适合于有JavaEE基础的,如:JSP、JSTL、Java基础等的学习者没有基础的学习者跟着课程可以学习,但是需要补充相关基础知识后,才能很好的参与到相关的工作中。 【Spring全家桶课程共包含如下几门】 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值