Spring boot 定制自己的错误

1)、如何定制错误的页面;

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

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

?   页面能获取的信息;

    ? timestamp:时间戳

?     status:状态码

?     error:错误提示

?     exception:异常对象

?     message:异常消息

?     errors:JSR303数据校验的错误都在这里

? 2)、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件夹下找;

? 3)、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面;

2)、如何定制错误的json数据;

? 1)、自定义异常处理&返回定制json数据;

    @ResponseBody
    @ExceptionHandler(UserNotExistException.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;
    }

2)、转发到/error进行自适应响应效果处理

@ControllerAdvice
public class DemoExceptionHandler {

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

        //传入我们自己的错误状态码  4xx 5xx
        //Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        //设置成自己的状态码
        request.setAttribute("javax.servlet.error.status_code",500);
        map.put("code","user.notexist");
        map.put("message","用户出错啦");

        request.setAttribute("ext",map);
        //转发到 /error由我们的BasicError 来处理返回JSON还是页面..
        return "forward:/error";
    }

}

3)、将我们的定制数据携带出去

出现错误以后,会来到/error请求,会被BasicErrorController处理,响应出去可以获取的数据是由getErrorAttributes得到的(是AbstractErrorController(ErrorController)规定的方法);

? 1、完全来编写一个ErrorController的实现类【或者是编写AbstractErrorController的子类】,放在容器中;

? 2、页面上能用的数据,或者是json返回能用的数据都是通过errorAttributes.getErrorAttributes得到;

? 容器中DefaultErrorAttributes.getErrorAttributes();默认进行数据处理的;

自定义ErrorAttributes
//定义自己的错误消息
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {

    @Override
    public Map<String, Object> getErrorAttributes(RequestAttributes requestAttributes, boolean includeStackTrace) {
        Map<String, Object> map = super.getErrorAttributes(requestAttributes, includeStackTrace);
        map.put("company", "hh");
    //我们的异常处理器携带的数据 requestAttributes为请求域中取数据    Map<String,Object> ext = (Map<String, Object>) requestAttributes.getAttribute("ext", 0);    map.put("ext",ext);
    return map; }}

原因: 如下图,我们放入ErrorAttributes 就会加入数据并返回

最终的效果:响应是自适应的,可以通过定制ErrorAttributes改变需要返回的内容,

原文地址:https://www.cnblogs.com/eason-d/p/9315207.html

时间: 2024-08-01 18:10:52

Spring boot 定制自己的错误的相关文章

spring boot定制Jackson ObjectMapper,为什么不生效

先说结论: 项目中定制了spring 的redisTemplate,而这个template没有使用我自定义的Jackson ObjectMapper.所以不生效. 下面是详细过程: 起因是spring boot项目加入了shiro,我打算使用redis去存储shiro的会话,方便以后横向扩展. 参考了网上的实现后,决定通过扩展org.apache.shiro.session.mgt.eis.AbstractSessionDAO来实现. 以下是实现代码: 1 package com.ceiec.b

Spring Boot 定制URL匹配规则的方法

事情的起源:有人问我,说编写了一个/hello访问路径,但是吧,不管是输入/hello还是/hello.html,还是/hello.xxx都能进行访问.当时我还以为他对代码进行处理了,后来发现不是,后来发现这是Spring Boot路由规则.好了,有废话了下,那么看看我们解决上面这个导致的问题. 构建web应用程序时,并不是所有的URL请求都遵循默认的规则.有时,我们希望RESTful URL匹配的时候包含定界符“.”,这种情况在Spring中可以称之为“定界符定义的格式”:有时,我们希望识别斜

解决spring boot JavaMailSender部分收件人错误导致发送失败的问题

使用spring boot通常使用spring-boot-starter-mail进行邮件的发送.当进行邮件群发的话,如果一个收件人的地址错误,会导致所有邮件都发送失败.因此我们需要在邮件发送失败的时候把错误的收件人移除,重新发送. 当邮件发送失败的时候会抛出MailSendException,异常信息中包含错误的收件人信息. 主要代码如下: private void sendMail(List<String> mailList, MimeMessageHelper message){ try

Spring Boot常见配置及错误

一.SpringBoot常见配置 (1)SpingBoot与MyBatis集成时跟踪SQL语句 log4j: logger: java: sql: ResultSet: TRACE (2)日志跟踪 debug: true logging: config: classpath:log4j2/log4j2.xml (3)MyBatis集成: #mybatis配置 mybatis: #配置映射类所在包名 type-aliases-package: com.xx.it.model (数据库实体对象所在路

Spring Boot项目中如何定制PropertyEditors

本文首发于个人网站:Spring Boot项目中如何定制PropertyEditors 在Spring Boot: 定制HTTP消息转换器一文中我们学习了如何配置消息转换器用于HTTP请求和响应数据,实际上,在一次请求的完成过程中还发生了其他的转换,我们这次关注将参数转换成多种类型的对象,如:字符串转换成Date对象或字符串转换成Integer对象. 在编写控制器中的action方法时,Spring允许我们使用具体的数据类型定义函数签名,这是通过PropertyEditor实现的.Propert

Spring Boot 请求错误处理

方法一:Spring Boot将所有的错误映射到/error,实现ErrorController接口 1 @Controller 2 @RequestMapping("/error") 3 public class BaseErrorController implements ErrorController { 4 private final Logger logger = LoggerFactory.getLogger(BaseErrorController.class); 5 6

Spring Boot基础教程9-web应用开发-错误处理

一.错误的处理 方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = "error") public class BaseErrorController implements ErrorController { private static final Logger logger = LoggerFactory.getLogger(BaseErrorControl

Spring Boot Learning(错误处理)

三种方式: 第一种: Spring Boot 将所有的错误默认映射到/error, 实现ErrorController 这时候需要定义一个Controller去实现ErrorController package com.example.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.web.ErrorControll

第5章 Spring Boot 功能

Spring Boot 功能 本节将会介绍Spring Boot的一些细节. 在这里,您可以了解您将要使用和自定义的主要功能. 如果还没有准备好,您可能需要阅读第二部分“入门指南”和第三部分“使用 Spring Boot”部分,以使您有基础的良好基础. 23. SpringApplication SpringApplication类提供了一种方便的方法来引导将从main()方法启动的Spring应用程序. 在许多情况下,您只需委派静态SpringApplication.run()方法: publ