我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot异常与重定向如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot异常与重定向如何实现

本篇内容主要讲解“springboot异常与重定向如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot异常与重定向如何实现”吧!

springboot 异常与重定向

在spring中,有两个重定向类型:

  • 301,永久性跳转

  • 302,暂时性跳转

默认调用302。

1.下面先通过一个简单的例子实现页面的重定向

@RequestMapping("/redirect/[code]")    public RedirectView redirectView(@PathVariable("code") int code,                               HttpSession session){         RedirectView red = new RedirectView("/",true);            //判断是不是301异常            if (code == 301){                //默认为302转移,此处设置为永久性转移                red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);            }            return red;    }

结果:

springboot异常与重定向如何实现

无论是访问“redirect/301”还是“redirect/302”,结果都会跳转到首页,只是一个是301类型,一个是302类型。

2.通过一个更简单的方法实现重定向

@RequestMapping("/redirect/[code]")    public RedirectView redirectView(@PathVariable("code") int code,                               HttpSession session){         //这种跳转都是302跳转,通过一个redirect前缀告诉请求,要跳转到首页        //所有的redirect请求都会跳转到首页        return "redirect:/";    }

结果:

springboot异常与重定向如何实现

这种方式重定向,都是通过302的方式进行的,无论“redirect”后面的url是什么,因为只要识别到redirect这个前缀,就会跳转到首页。

3.在重定向过程中,用session传递信息

1.重定向页面    @RequestMapping("/redirect/[code]")    public String redirectView(@PathVariable("code") int code,                               HttpSession session){         //这种跳转都是302跳转,通过一个redirect前缀告诉请求,要跳转到首页        //所有的redirect请求都会跳转到首页        //通过session来传递信息        session.setAttribute("msg","Jump from redirect");        return "redirect:/";    }2.首页    @RequestMapping("/")    @ResponseBody    public String index(HttpSession session){        //在首页中显示重定向中的session        return "Hello World!" + session.getAttribute("msg");    }

结果:

springboot异常与重定向如何实现

无论redirect后面的url是什么,都会返回首页,并显示相应的信息。

4.admin请求异常

@RequestMapping("/admin")    @ResponseBody    public String admin(@RequestParam("key") String key){    //如果key=“admin”        if ("admin".equals(key)){            return "hello admin";        }    //否则抛出异常        throw new IllegalArgumentException("Key Wrong!");    }

结果:

springboot异常与重定向如何实现

springboot异常与重定向如何实现

在“key=admin”的时候,返回相应信息;在“key!=admin”的时候,返回错误信息。

5.自己定义异常

   @ExceptionHandler()    @ResponseBody    public String error(Exception e){        return "error:" + e.getMessage();    }

结果:

springboot异常与重定向如何实现

springboot异常与重定向如何实现

可以看出,在出现异常的时候,使我们自己定义的异常界面内容,和4中的不同。

springboot 异常统一处理

这里先对需要使用到的注解或者类进行说明,顺便理清楚条理。

@ExceptionHandler:注解使用在方法上,值为指定某个异常,当该方法所在的controller出现的异常与注解的异常对应,则会触发注解的方法。

下面这个controller一旦出现异常都会将异常捕获转给该方法进行处理

@RestController@RequestMapping("user")public class UserController {    @ExceptionHandler(value = Exception.class)    public void solveException(){        //异常处理逻辑    }    }

@controllerAdvice: 注解在类上,注解的类会注册到spring容器中,类中可有三种注解,@ExceptionHandler,@InitBinder,@ModelAttribute。该类下只要是注解上面三个注解的方法就是让把方法应用到程序中所有带有@RequesMapping注解的方法上。

流程 :

  • 自定义一个自己的异常

  • 声明带有@ControllerAdvice的类和@ExceptionHandler的方法,将@ExceptionHandler的方法应用到所有controller。

  • 声明一个返回结果类

  • 声明一个枚举类,用来包含可能出现的异常类型

Demo

自定义异常:

@Data@AllArgsConstructorpublic class MyException extends RuntimeException{    private Integer code;    private String msg;    public MyException(ResultEnum resultEnum){        this.msg = resultEnum.getMsg();        this.code = resultEnum.getCode();    }}

自定义返回结果:

@Data@AllArgsConstructor@NoArgsConstructorpublic class Result {    private int code;    private String msg;}

枚举类:

public enum  ResultEnum {    UNKNOW_ERROR(-1,"未知错误"),    USER_ERROR(-2,"用户信息错误"),    SUCCESS(0,"成功");    private  Integer code;    private  String msg;    ResultEnum(Integer code, String msg) {        this.code = code;        this.msg = msg;    }    //省略getter和setter}

工具类:

public class ResultUtil {    public static Result error(Integer code, String msg) {        Result result = new Result();        result.setCode(code);        result.setMsg(msg);        return result;    }}

自定义异常捕获类:

@ControllerAdvice@Slf4jpublic class MyExceptionHandler { //接收的是Exception,也就是只要是异常都会执行这方法    @ExceptionHandler(value=Exception.class)    @ResponseBody    public Result handle(Exception e){        if(e instanceof MyException){            MyException myException = (MyException) e;            return ResultUtil.error(myException.getCode(),myException.getMsg());        }else{            return ResultUtil.error(-1,"未知错误");        }    }}

controller类:

@RestController@RequestMapping("user")public class UserController {    @GetMapping("exception")    public void catchException() throws Exception{        throw new MyException(ResultEnum.USER_ERROR);    } }

流程:

  • 我们访问http://localhost:8080/user/exception来访问该方法,并抛出我们自定义的异常,通过枚举类来进行对异常信息的集合。

  • 通过自定义的异常捕获类,来进行对异常的捕获,执行方法。

  • 异常捕获类的方法中,通过ResultUtil工具类来进行生成Result对象返回。

到此,相信大家对“springboot异常与重定向如何实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot异常与重定向如何实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot异常与重定向如何实现

本篇内容主要讲解“springboot异常与重定向如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot异常与重定向如何实现”吧!springboot 异常与重定向在spri
2023-06-22

springboot如何实现全局异常处理及自定义异常类

这篇文章主要介绍springboot如何实现全局异常处理及自定义异常类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!全局异常处理及自定义异常类全局异常处理定义一个处理类,使用@ControllerAdvice注解。@
2023-06-29

Shell中如何实现重定向

这期内容当中小编将会给大家带来有关Shell中如何实现重定向,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。标准输入、标准输出和标准错误一个程序的的输入可以来自于键盘,也可以来自于文件或者其他设备;同样的,
2023-06-09

php中如何实现重定向

这篇文章主要介绍php中如何实现重定向,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php中实现重定向的方法:1、使用“header(location:跳转地址);”语句;2、使用“echo
2023-06-29

Springboot项目中如何实现异常处理自定义

这期内容当中小编将会给大家带来有关Springboot项目中如何实现异常处理自定义,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景Springboot 默认把异常的处理集中到一个ModelAndView
2023-05-31

SpringBoot中如何实现全局异常与数据校验

SpringBoot中如何实现全局异常与数据校验,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。项目建立利用idea 工具,很容易的搭建一个SpringBoot项
2023-06-16

dos如何实现内容重定向

这篇文章主要介绍了dos如何实现内容重定向,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有没有办法把显示在命令行窗口中的帮助信息保存下来呢?   答案是肯定的,并且有不止一种
2023-06-09

SpringBoot如何实现统一异常处理

这篇文章将为大家详细讲解有关SpringBoot如何实现统一异常处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.介绍在日常开发中发生了异常,往往是需要通过一个统一的异常处理处理所有异常
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录