是否在写代码的时候遇到过这样一种情况,蛮项目写的都是try catch,尤其是controller,本来就是一个简单的sellect,写了贼多的代码.

是不是这个时候就想要一个全局的异常处理的机制来处理,是不是第一灵感就会想到切面.

下面来记录下全局异常捕获的方法

package com.example.demo11;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author :szy
 * @title: HelloController
 * @projectName demo11
 * @description: TODO
 * @date 2020/10/30-11:40
 */
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){

        String val ="10-1";
        //异常
        Integer.valueOf(val);

        return "hello world";
    }
}

异常捕获代码

package com.example.demo11;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author :szy
 * @title: UnifiedExceptionHandler
 * @projectName demo11
 * @description: TODO
 * @date 2020/10/30-11:50
 */
@Component
@ControllerAdvice
public class UnifiedExceptionHandler {

    private Logger log = LoggerFactory.getLogger(UnifiedExceptionHandler.class);

    /**
     * 自定义异常
     * @param e 异常
     * @return 异常结果
     */
    @ExceptionHandler(value = NumberFormatException.class)
    @ResponseBody
    public String handleNumberFormatException(NumberFormatException e) {
        log.error(e.getMessage(), e);
        return "转换错误";
    }



    /**
     * 全局异常处理
     * @param e 异常
     * @return 异常结果
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public String handleBaseException(Exception e) {
        log.error(e.getMessage(), e);
        return "error 0000";
    }

}

重点:controller连不要写try cath ,不然不会被最顶层捕获

运行的结果:

 

转载请注明出处:http://www.lntyys.com/article/20230328/748596.html

随机推荐

  1. php输出全部gb2312编码内的汉字方法

    php输出全部gb2312编码内的汉字,$area表示分区,$pos表示分区内所在位置。 php $fp = fopen('t.txt', 'a'); for($area = 0xb0; $area = 0xf7; $area++) ...

  2. 如果全部为真,则在numpy中为真

    我有两个数组:arr1 = np.linspace(1, 10, 10) arr2 = np.linspace(50, 100, 10)复制然后我想做的是:arr1 * arr2 == arr2 * arr1复制但是我希望得到一个单独的Tr...

  3. 全部作业详解

    # 1.想办法打印出jason l1 = [11, 22, 'kevin', ['tony', 'jerry', [123, 456, 'jason']]] '''分步操作''' # 1.先看大列表到底有几个数据值 以及我们想要的数据值在...

  4. MDX全部计算平均值

    在ALL列中,如果是2010年和假日,我想要总收入的平均值,但我得到的是所有收入的总和。也许有人能帮上忙?WITH MEMBER [Measures].[Income] AS [Measures].[Average Inco...

  5. 正则表达式全部符号最强解释!(官方版)

    正则表达式全部符号详细解释 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n'...

  6. 查询返回全部结果而不是过滤结果的查询

    我有一个从原始查询派生的查询,原始查询有50条记录,qoq应该给我30行,但它给了我整整50行,我在这里做什么以下是我的查询cfquery name=qryResults dbtype=query Select * From...

  7. ECSHOP全部品牌页实现分页换页功能方法

    最近看到有朋友在论坛问到过此类问题,所以抽空写了下文,在全部品牌页实现分页换页功能,对商品品牌较多的朋友也许会有帮助,这个修改教程需要修改ecshop的系统文件,所以修改之前请先备份文件。 修改教程 打开brand.php找到 if (e...

  8. 将全部转换为大写

    嘿,我是c++的新手,正在尝试将用户输入的单词全部转换为大写#includeiostream #includecstring using namespace std; int main() { int size=10; int ...

  9. Checkbox-选择全部切换,并为每个复选框指定单独的功能

    我有一个复选框列表,我希望每当选中select all时,所有的复选框都应该被选中,当它被取消选中时,下面的所有复选框都应该被取消选中。但是此后,我还希望如果没有按下select all,那么应该获取并附加各个复选框的值。Select Al...

  10. conda更新--全部失败

    我正在尝试更新我的机器上的anaconda,但得到了以下结果: (base) Chriss-MBP:opt chrisgaughan$ pwd /opt (base) Chriss-MBP...