精华内容
参与话题
问答
  • Add ErrorController.

    2020-12-02 11:16:10
    s <code>ErrorController</code> is used which extends <code>Controller</code> not <code>AppController</code>. Most go down the wrong path of either trying to use custom error handler or exception ...
  • <p>The <code>Overriding the Default ErrorController</code> paragraph in <code>controller/error_pages.rst</code> still needs to be updated. I struggled with this so I would really appreciate if someone...
  • springboot ErrorController

    2020-10-09 13:16:47
    后端操作经常会抛出异常,而这些异常是前端无法显示的,所以我们还需切换到后端命令行才能看到具体的错误细节,非常麻烦,尤其是将项目部署到服务器上的时候,未解决这个问题,我们可以通过实现ErrorController接口...


    在编写springboot项目的时候,后端操作经常会抛出异常,而这些异常是前端无法显示的,所以我们还需切换到后端命令行才能看到具体的错误细节,非常麻烦,尤其是将项目部署到服务器上的时候,未解决这个问题,我们可以通过实现ErrorController接口,来在前端显示报错信息。

    CommonErrorController

    代码:

    package com.example.commonerror.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.web.servlet.error.ErrorAttributes;
    import org.springframework.boot.web.servlet.error.ErrorController;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.context.request.WebRequest;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Map;
    
    @RestController
    public class CommonErrorController implements ErrorController {
    
        @Autowired
        private ErrorAttributes errorAttributes;
    
        /**
         * 默认错误
         */
        private static final String path_default = "/error";
    
        @Override
        public String getErrorPath() {
            return path_default;
        }
    
        /**
         * JSON格式错误信息
         */
        @RequestMapping(value = path_default,  produces = {MediaType.APPLICATION_JSON_VALUE})
        public String error(HttpServletRequest request, WebRequest webRequest) {
            Map<String, Object> body = this.errorAttributes.getErrorAttributes(webRequest, true);
            return body.toString();
        }
    
    }
    
    

    测试

    测试代码

    package com.example.commonerror.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class TestController {
        @GetMapping("/test")
        public String test(){
            return "test";
        }
    
        @GetMapping("/test1")
        public String test1(){
            throw new RuntimeException("抛出异常");
        }
    }
    
    

    测试结果

    不报错的执行

    在这里插入图片描述

    报错的执行

    在这里插入图片描述

    源代码

    项目源码

    展开全文
  • java ErrorController报错

    2020-07-08 19:54:53
    测试环境下 k8s 每隔20s报继承ErrorController的错,httpStatus:404 。一启动 就开始报错,其他的请求可以响应。本地却没有重现出来。
  • <div><p>| Q | A | | --- | --- | | Bug fix? | no | | New feature? | no | | BC breaks? | no | | Deprecations? | no | | Tests pass?...| Fixed tickets | n/a | ...<p>cc </p><p>该提问来源于开源项目:...
  • Springboot异常处理errorController

    Springboot异常处理errorController

    参考文章:

    (1)Springboot异常处理errorController

    (2)https://www.cnblogs.com/jiahaoJAVA/p/10087267.html


    备忘一下。


    展开全文
  • BasicErrorController已经默认实现了“text/html”的处理,如果想返回自定义JSON格式信息,则实现“ErrorController ”接口,增加一个produces 为“application/json”的方法即可,如: @RestController public ...

    SpringBoot的默认异常处理映射为“/error”。BasicErrorController已经默认实现了“text/html”的处理,如果想返回自定义JSON格式信息,则实现“ErrorController ”接口,增加一个produces 为“application/json”的方法即可,如:

    @RestController
    public class ExceptionController implements ErrorController {
    
        @Autowired
        private ErrorAttributes errorAttributes;
    
        /**
         * 默认错误
         */
        private static final String path_default = "/error";
    
        @Override
        public String getErrorPath() {
            return path_default;
        }
    
        /**
         * JSON格式错误信息
         */
        @RequestMapping(value = path_default,  produces = {MediaType.APPLICATION_JSON_VALUE})
        public ResponseMessage error(HttpServletRequest request) {
            RequestAttributes requestAttributes = new ServletRequestAttributes(request);
            Map<String, Object> body = this.errorAttributes.getErrorAttributes(requestAttributes, true);
            return ResponseMessage.fail("服务器端异常!", body);
        }
    
    }

    ResponseMessage 为自定义的实体类,用于向前端返回统一格式信息,结构如:

    public class ResponseMessage {
    
        /**
         * 是否成功
         */
        private boolean success;
    
        /**
         * 返回文字
         */
        private String msg;
    
        /**
         * 返回数据
         */
        private Object data;
    
        public ResponseMessage() {
        }
    
        public ResponseMessage(boolean success, String msg, Object data) {
            this.success = success;
            this.msg = msg;
            this.data = data;
        }
    
        public boolean isSuccess() {
            return success;
        }
    
        public void setSuccess(boolean success) {
            this.success = success;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public static ResponseMessage success(){
            return new ResponseMessage(true, null, null);
        }
    
        /**
         * 成功返回方法
         * @param data 返回数据
         */
        public static ResponseMessage success(Object data){
            return new ResponseMessage(true, null, data);
        }
    
        /**
         * 失败返回方法--默认
         */
        public static ResponseMessage fail(){
            return new ResponseMessage(false, null, null);
        }
    
        /**
         * 失败返回方法
         * @param message 文字信息
         */
        public static ResponseMessage fail(String message){
            return new ResponseMessage(false, message, null);
        }
    
        /**
         * 失败返回方法
         * @param message 文字信息
         * @param data 数据
         */
        public static ResponseMessage fail(String message, Object data){
            return new ResponseMessage(false, message, data);
        }
    
    }

    开发者可以根据实际业务进行扩展次实体类,如增加时间戳、错误码等信息

    转载于:https://www.cnblogs.com/Schrodinger6/p/11338452.html

    展开全文
  • SpringBoot源代码中有这样一个ErrorController,针对SpringMvc错误的Mapping进行处理,很多的时候我们写了一个Controller,在浏览器上访问的时候经常会出现如下情况: 1. 404异常 2. 500异常 上述两种异常情况下...

    一、Springboot默认的错误处理

    SpringBoot源代码中有这样一个ErrorController,针对SpringMvc错误的Mapping进行处理,很多的时候我们写了一个Controller,在浏览器上访问的时候经常会出现如下情况:

    1. 404异常

    在这里插入图片描述

    2. 500异常

    在这里插入图片描述
    上述两种异常情况下出现的异常界面,是SpringBoot默认的,原因是前端发起请求给springmvc的时候,SpringMVC后台没有找到相应的RequestHandleMapping,springBoot默认返回一个错误的页面,对错误的一种默认处理,,这也是SpringBoot对常见异常的一种默认封装。
    通过查看SpringBoot源代码,发现这个界面是可以自定义的,下面就来测试一下

    二、改变默认的异常处理

    1. 创建springboot-demo项目

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.thinkingcao</groupId>
        <artifactId>springboot-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
       <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <!-- SpringBoot2.2.1 快速开发框架,整合第三方常用的框架 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.1.RELEASE</version>
        </parent>
    
        <dependencies>
    
            <!-- SpringBoot -web整合好了SpringMVC、Spring -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
        </dependencies>
    </project>
    

    2. 创建IndexController,里面写两个方法,toIndex方法正常跳转,test方法是故意写的一个空指针异常,会报500错误

    package com.thinkingcao.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
     * <pre>
     * @desc:
     * @author: cao_wencao
     * @date: 2019-12-16 23:25
     * @version: 1.0
     * </pre>
     */
    @RestController
    public class UserController {
    
    
        @RequestMapping("/")
        public String index() {
            return "hellow Thinkingcao";
        }
    
        @RequestMapping("/testUser")
        public String test() {
            List list = null;
            return list.toString();
        }
    
    
    }
    
    

    3. 启动项目

    1.访问: http://localhost:8888/toIndex 如图所示:没有任何问题
    在这里插入图片描述
    2.访问: http://localhost:8888/testUser 如图所示:报500异常错误
    在这里插入图片描述
    3.查看控制台,报空指针异常:
    在这里插入图片描述
    4. 随机访问一个不存在的地址,比如http://localhost:8080/aa,如图所示,404没有找到:
    在这里插入图片描述
    通过上面几个例子,发现SpringBoot默认对异常的处理都是返回前台这行日志,说明springboot报错的时候都在找/error这个地址

    There was an unexpected error (type=Not Found, status=404).

    由此说明SpringBoot的默认异常处理映射路径为“/error”BasicErrorController已经默认实现了“text/html”的处理,如果想返回自定义json格式信息,则需要实现“ErrorController ”接口,增加一个produces 为“application/json”的方法即可:

    三、改造异常处理

    1. CommonErrorController.java

    package com.thinkingcao.controller;
    
    import com.thinkingcao.result.ResponseEntity;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.web.servlet.error.ErrorAttributes;
    import org.springframework.boot.web.servlet.error.ErrorController;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.HashMap;
    import java.util.Map;
    
    @RestController
    public class CommonErrorController implements ErrorController {
    
        @Autowired
        private ErrorAttributes errorAttributes;
    
        /**
         * 默认错误
         */
        private static final String path_default = "/error";
    
        @Override
        public String getErrorPath() {
            return path_default;
        }
    
        /**
         * JSON格式错误信息
         */
        @RequestMapping(value = path_default,  produces = {MediaType.APPLICATION_JSON_VALUE})
        public ResponseEntity error(HttpServletRequest request) {
            Map<String,String>   data = new HashMap<>();
            data.put("code","500");
            return ResponseEntity.fail("服务器端异常",data);
        }
    }
    

    2. 重启项目,访问前面报控制异常的方法: http://localhost:8888/testUser 如下图: 这是访问接口报空指针再不是像之前那样展示SpringBoot默认的异常界面了,证明我们自定义的ErrorController处理是OK的

    在这里插入图片描述
    所以,通过以上测试,我们清楚的知道了,当我们项目中实现ErrorController后,当发生404、500异常时,可直接返回JSON,前端拿到JSON数据,直接跳转到比较友好的404、500页面,这些404、500页面我们可以根据UI设计的来。

    展开全文
  • springBoot升级注意 ErrorController

    千次阅读 2019-04-29 16:36:58
    1.ErrorController包名改动 1.*的版本包名为 org.springframework.boot.autoconfigure.web.ErrorController 2.*的版本包名为 org.springframework.boot.web.servlet.error.ErrorController ...
  • SpringBoot-ErrorController

    2018-06-27 17:28:10
    Springboot默认的错误处理SpringBoot源代码中有这样一个ErrorController,针对SpringMvc错误的Mapping进行处理,很多的时候我们写了一个Controller,在浏览器上访问的时候经常会出现如下情况:Whitelabel Error Page...
  • 在项目中我们遇到404找不到的错误、或者500服务器错误都需要...我们需要实现ErrorController接口,重写handleError方法。 package com.ciyou.edu.controller import org.springframework.boot.autoconfigure.web....
  • <div><p>| Q | A | ------------ | --- | Feature PR | symfony/symfony#33271 | PR author(s) | | Merged in | 4.4</p><p>该提问来源于开源项目:symfony/symfony-docs</p></div>
  • @ControllerAdvice和ErrorController的用法

    千次阅读 2019-09-17 22:06:56
    在Java中异常可以分为Error和Exception,@ControllerAdvice用来处理系统中的Exception,ErrorController处理系统中的Error。 1.ErrorController 当系统出现404或者405等错误信息时,springboot默认的访问路径为/...
  • springMvc中@ControllerAdvice和ErrorController接口使用 一、简介 springMvc中对全局的处理,可以使用aop。这里介绍另外一种方式,借助springMvc的ControllerAdvice注解和ErrorController接口。 二、...

空空如也

1 2 3 4 5 ... 15
收藏数 283
精华内容 113
关键字:

errorcontroller