广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot 实战:异常与重定向问题
  • 654
分享到

springboot 实战:异常与重定向问题

2024-04-02 19:04:59 654人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录SpringBoot 异常与重定向1.下面先通过一个简单的例子实现页面的重定向2.通过一个更简单的方法实现重定向3.在重定向过程中,用session传递信息4.admin请求异常

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;
    }

结果:

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

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


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

结果:

这种方式重定向,都是通过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");
    }

结果:

无论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!");
    }

结果:

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

5.自己定义异常


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

结果:

可以看出,在出现异常的时候,使我们自己定义的异常界面内容,和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
@AllArgsConstructor
public class MyException extends RuntimeException{
    private Integer code;
    private String msg;
    public MyException(ResultEnum resultEnum){
        this.msg = resultEnum.getMsg();
        this.code = resultEnum.getCode();
    }
}

自定义返回结果:


@Data
@AllArgsConstructor
@NoArgsConstructor
public 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
@Slf4j
public 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对象返回。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springboot 实战:异常与重定向问题

本文链接: https://www.lsjlt.com/news/160164.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • springboot 实战:异常与重定向问题
    目录springboot 异常与重定向1.下面先通过一个简单的例子实现页面的重定向2.通过一个更简单的方法实现重定向3.在重定向过程中,用session传递信息4.admin请求异常...
    99+
    2022-11-12
  • springboot异常与重定向如何实现
    本篇内容主要讲解“springboot异常与重定向如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot异常与重定向如何实现”吧!springboot 异常与重定向在spri...
    99+
    2023-06-22
  • 基于springboot redirect重定向路径问题总结
    目录SpringMVC重定向视图RedirectView小分析前言实例讲解Controller代码我们通过firebug看下路径:总结SpringMVC重定向视图RedirectVi...
    99+
    2022-11-12
  • Python 重定向和实时索引:常见问题解答
    在 Python 编程中,重定向和实时索引是两个常见的问题。本文将深入探讨这两个问题,并提供一些解决方案和示例代码。 一、什么是重定向? 在 Python 中,重定向是指将输出从一个文件流(例如标准输出)转移到另一个文件流或文件中。这在处...
    99+
    2023-10-24
    重定向 实时 索引
  • Python Load方法与重定向:异步编程中的挑战与机遇
    Python的异步编程在当今的计算机领域中越来越受欢迎。异步编程可以让Python在高负载环境下更好地运行,提高程序的性能和响应速度。然而,在异步编程中,重定向和Load方法可能会带来一些挑战和机遇。本文将介绍Python的Load方法和重...
    99+
    2023-06-15
    load 异步编程 重定向
  • springboot项目拦截器重定向循环问题的解决
    目录springboot项目拦截器重定向循环解决办法springboot拦截器无限循环报错springboot项目拦截器重定向循环 本菜鸟很久没写东西了,这回是解决了一个小问题,希望...
    99+
    2022-11-12
  • ASP 重定向:最佳实践和常见问题解决方案。
    ASP 重定向:最佳实践和常见问题解决方案 重定向是 Web 开发中常用的技术之一。重定向可以将一个页面或资源的请求转发到另一个 URL,通常是因为原始 URL 无效或需要跳转到其他页面。在 ASP 中,重定向是通过 Response.Re...
    99+
    2023-10-27
    重定向 打包 面试
  • ASP 与 Unix 容器的重定向问题:如何解决?
    随着容器技术的不断普及,越来越多的应用程序被部署在容器中运行。然而,在这个过程中,我们也遇到了一些问题,其中一个就是容器内的重定向问题。特别是在 ASP 应用程序中,这个问题更加突出。本文将介绍 ASP 应用程序在 Unix 容器中的重定...
    99+
    2023-08-14
    重定向 unix 容器
  • Java实战之OutOfMemoryError异常问题及解决方法
    目录一、简言二、代码实战1、Java堆溢出2、虚拟机栈和本地方法栈溢出3、运行时常量池溢出4、方法区溢出5、本机直接内存溢出三、JVM常用的启动参数四、面试题五、总结在Java虚拟机...
    99+
    2022-11-13
  • PHP中NumPy响应重定向的问题与解决方案
    在PHP中,NumPy是一个非常受欢迎的数学库。然而,如果您在使用NumPy的过程中遇到了响应重定向的问题,那么您可能会发现您的代码无法正常工作。在本文中,我们将探讨PHP中NumPy响应重定向的问题,并提供解决方案。 什么是响应重定向?...
    99+
    2023-09-30
    numy 响应 重定向
  • PHP 异步编程和 Laravel 重定向:解决这些常见问题的最佳方法
    PHP 是一种流行的编程语言,广泛用于 Web 开发。在开发 Web 应用时,异步编程和重定向是两个常见问题。Laravel 是一个流行的 PHP Web 框架,它提供了一些解决这些问题的最佳方法。本文将介绍 PHP 异步编程和 Lara...
    99+
    2023-10-17
    异步编程 laravel 重定向
  • 重定向和数组的Python编程:如何解决常见问题?
    重定向和数组是Python编程中常见的问题,但是很多初学者可能不知道如何解决这些问题。在本文中,我们将介绍如何使用Python解决这些常见问题,并演示一些代码示例。 一、什么是重定向? 在Python编程中,重定向是将程序的输出流重定向到一...
    99+
    2023-07-31
    编程算法 数组 重定向
  • Python HTTP文件重定向:如何处理和避免常见问题?
    在网络通信过程中,HTTP重定向是一个非常常见的操作。在HTTP请求中,服务器可能会将请求重定向到另一个URL,这时客户端需要重新发送请求到新的URL地址上。虽然HTTP重定向看起来很简单,但实际上它可能会引起一些问题。在本文中,我们将讨...
    99+
    2023-08-27
    http 文件 重定向
  • 如何解决Java文件重定向时出现的常见问题?
    Java 文件重定向是一个非常常见的操作,在 Java 中有很多种方式来进行文件重定向。然而,在进行文件重定向时,我们常常会遇到一些问题,例如文件路径不正确、文件无法打开或者文件读写出错等。那么,该如何解决这些常见的问题呢?本文将会为您详细...
    99+
    2023-09-05
    文件 重定向 load
  • Python Load方法与异步编程:解决重定向难题的秘诀?
    在进行网络爬虫开发时,我们经常会遇到一些网站会进行重定向,这时候我们需要对重定向进行处理,否则就会出现数据丢失的情况。而Python中的Load方法和异步编程则是解决这个难题的秘诀。 Load方法是Python中一个非常常用的库,它可以模...
    99+
    2023-06-15
    load 异步编程 重定向
  • 异步编程中的Python Load方法:如何应对重定向问题?
    异步编程是一种处理高并发、高性能的编程方式。在Python中,异步编程主要通过asyncio模块实现。在异步编程中,经常会遇到重定向的问题,特别是在使用Python的Load方法时。本文将介绍异步编程中的Python Load方法,以及如何...
    99+
    2023-06-15
    load 异步编程 重定向
  • “Java IDE 重定向和打包:如何应对这个具有挑战性的问题?”
    Java IDE 重定向和打包:如何应对这个具有挑战性的问题? Java IDE 作为开发者的得力工具,在开发过程中扮演着重要的角色。然而,在使用 Java IDE 进行开发时,我们经常会遇到一些具有挑战性的问题,其中最常见的两个问题就是重...
    99+
    2023-08-19
    ide 重定向 打包
  • 日志重定向:Java和NPM中的常见问题和解决方案。
    日志重定向:Java和NPM中的常见问题和解决方案 日志记录是软件开发中非常重要的一部分,它可以帮助我们跟踪应用程序的运行状态,检测错误和性能问题。在Java和NPM中,日志记录是非常常见的。然而,在实际开发中,我们经常会遇到一些与日志记录...
    99+
    2023-06-04
    npm 日志 重定向
  • 如何使用 LeetCode 解决 ASP 重定向日志中的常见问题?
    ASP 重定向是一个常见的问题,特别是在网站开发中。重定向是指在 Web 应用程序中,将用户浏览器的请求重定向到另一个 URL 地址。在 ASP 中,重定向通常通过 Response.Redirect 方法来实现。然而,如果代码中存在问题...
    99+
    2023-09-20
    重定向 日志 leetcode
  • Swagger异常定位纪实Swagger设计问题分析
    目录前言异常信息异常分析DEBUG找到真实原因结论及注意事项后记为啥不直接升级3.X?前言 swagger ui是一个采用注解驱动的接口文档工具,目前已支持标准的open api v...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作