栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

@ControllerAdvice

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@ControllerAdvice

SpringMVC 中 @ControllerAdvice 注解

@ControllerAdvice可以实现

  • 全局异常处理
  • 全局数据绑定
  • 全局数据预处理
全局异常处理

代码如下

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class MyGlobalExceptionHandler {
    //指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来
    @ExceptionHandler(Exception.class)
    public ModelAndView customException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("message",e.getMessage());
        mv.setViewName("myerror");
        return mv;
    }
}

其中@ExceptionHandler注解是用来指明异常的处理类型的。

全局数据绑定

一般用来做一些初始化的数据操作,将一些公共的数据定义在这个注解的类中,使得每个controller接口都可以访问这些数据。

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class MyGlobalExceptionHandler {
    @ModelAttribute(name = "md")
    public Map mydata(){
        HashMap map = new HashMap<>();
        map.put("age",99);
        map.put("gender","男");
        return map;
    }
}

@ModelAttribute这个注解的意思是,标记这个方法的返回数据是一个全局数据,接下来就可以在任何一个controller接口获取到这里的数据了。下面写一个测试的controller实验一下,顺便给他一个异常情况。

package com.tobest.thymeleaf.controller;

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

import java.util.Map;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(Model model){
        Map map = model.asMap();
        System.out.println(map);
        int i = 1/0;
        return "hello";
    }
}

控制台输出了我们的map,并且在下面报了异常,除以0

全局数据预处理
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294777.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号