redirect导致的循环重定向问题(史上最全)

目录

@PathVariable注解和redirect的作用

使用场景

返回值未命中

返回值路径讲解


起因:#记录一下学习编程遇到的最难受的一个bug

@PathVariable注解和redirect的作用

首先了解一下@PathVariable和redirect

在Spring框架中,@PathVariable 注解主要用于提取 URI 模板中的变量

redirect: 是在Spring MVC控制器方法中使用的特殊前缀,用于执行重定向。有相对路径和绝对路径之分,如果有/则代表绝对路径

使用场景

举个栗子:

@RequestMapping("/original/{id}")
public String originalMethod(@PathVariable String id) {// Do something with the 'id'return "redirect:/target/" + id;
}@RequestMapping("/target/{id}")
public String targetMethod(@PathVariable String id, Model model) {// Here you'll get the 'id' passed from the originalMethodmodel.addAttribute("id", id);return "targetPage";
}

上面的代码在执行的时候,会先进入originalMethod方法,返回的时候它会重新请求target下的URL路径,也就是执行一次targetMethod方法,和我们直接跳转到页面是有区别的,比如我们需要对页面进行赋值,如果没有重新执行后端方法,那么就会出现空白页的现象

因此:我认为redirect重定向主要是为了重新发起一次http请求执行我们的后端业务,一般情况下只会执行一次

返回值未命中

那么问题出现了,如果返回值没有命中,类似于下面的场景

@RequestMapping("/original/{id}")
public String originalMethod(@PathVariable String id) {// Do something with the 'id'return "redirect:target";
}

那么当你访问 /original/123,此方法会被调用,然后它会重定向到相对路径 target。如果你没有提供一个完整的路径(比如 /target),那么它会被解释为相对于当前请求URL的路径。所以它会尝试重定向到 /original/target

如果 /original/target 路径恰好与另一个控制器方法匹配,那么那个方法会被调用。就不会发生死循环问题

但如果 /original/target 路由与 originalMethod 方法匹配,会导致无限重定向循环,因为它会不断地调用自己。

举个栗子:

@RequestMapping("/original")
public String originalMethod() {// Do something with the 'id'return "redirect:/original";
}

返回值路径讲解

@RequestMapping("/original")
public String originalMethod() {// Do something with the 'id'return "redirect: /original";
}
@RequestMapping("/original")
public String originalMethod() {// Do something with the 'id'return "redirect:original";
}

1.return "redirect:original";

这是一个相对重定向。当你在当前URL路径下进行这样的重定向时,它会添加到当前路径。例如,如果你当前的URL是 /somepath/original,此重定向将尝试导航至 /somepath/original/original

2.return "redirect:/original";

这是一个绝对重定向。不论当前URL是什么,它都会导航至应用的根目录下的 /original。也就是说,它始终导向到 /original

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不一样的网络协议-------KCP协议

1、kcp 的协议特点 1.1、RTO 不翻倍 RTO(Retransmission TimeOut),重传超时时间。tcp x 2,kcp x 1.5,提高传输速度 1.2、选择重传 TCP丢包时会全部重传从该包开始以后的数据,而KCP选择性重传,只重传真正丢失的数据包…

基于单片机16位智能抢答器设计

**单片机设计介绍,1645【毕设课设】基于单片机16位智能抢答器设计(裁判功能、LCD数码管显示)汇编 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序程序文档 六、 文章目录 一 概要 基于单片机16位智能抢答器设计&#x…

json格式存储b64编码的rgb raw数据

1.rgb raw数据准备 利用python将jpg里面的rgb raw数据提取出来。 import cv2# 读取 JPG 图像 image_path 1.jpg image cv2.imread(image_path)#imread读出来的顺序是BGR print("image shape:",image.shape)# 将图像由BGR转换为 RGB 数据 rgb_data cv2.cvtColor(im…

C++单调向量算法应用:所有子数组中不平衡数字之和

涉及知识点 单调向量 题目 一个长度为 n 下标从 0 开始的整数数组 arr 的 不平衡数字 定义为&#xff0c;在 sarr sorted(arr) 数组中&#xff0c;满足以下条件的下标数目&#xff1a; 0 < i < n - 1 &#xff0c;和 sarr[i1] - sarr[i] > 1 这里&#xff0c;sort…

vivado窗口使用与分析2-IDE 中的逻辑分析

逻辑分析 包括 &#xff1a; • “ Netlist ”窗口 • “ Hierarchy ”窗口 • “ Schematic ”窗口 1、 “ Netlist ”窗口 “ Netlist ” &#xff08; 网表 &#xff09; 窗口显示了网表中由综合工具所处理的设计层级。 根据综合设置 &#xff0c; 网表层级与原始 RT…

buuctf_练[安洵杯 2019]easy_web

[安洵杯 2019]easy_web 文章目录 [安洵杯 2019]easy_web掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 url地址和源代码的信息捕捉&#xff1b;图片和base64之间转换&#xff1b;base64和十六进制编码的了解&#xff1b;代码审计&#xff0c;绕过正则匹配对关键字的…

uniapp 将流转化为视频并播放 微信小程序

该问题最关键的一步是将后端传回来的流&#xff0c;转化成视频&#xff0c;并播放。 1、从服务器请求数据流到前端 2、新建一个临时文件&#xff0c;将数据流写入这个文件里面&#xff0c;并自定义路径命名。 const fs wx.getFileSystemManager(); //获取全局唯一的文件管理…

Pytorch代码入门学习之分类任务(二):定义数据集

一、导包 import torch import torchvision import torchvision.transforms as transforms 二、下载数据集 2.1 代码展示 # 定义数据加载进来后的初始化操作&#xff1a; transform transforms.Compose([# 张量转换&#xff1a;transforms.ToTensor(),# 归一化操作&#x…

面试经典150题——Day24

文章目录 一、题目二、题解 一、题目 68. Text Justification Given an array of strings words and a width maxWidth, format the text such that each line has exactly maxWidth characters and is fully (left and right) justified. You should pack your words in a …

【Java网络原理】 四

本文主要介绍了TCP/IP五层协议中的应用层常见的数组组织格式和传输层UDP协议。 一.应用层 1.网络通信数据的实质 网络上传输的数据&#xff0c;本质就是字符串&#xff08;准确的说&#xff0c;是二进制的字符串&#xff09; Java中的各种对象&#xff0c;是无法直接传输的 &…

Cannot connect to the Docker

执行docker基础命令失败&#xff01; Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 原因&#xff1a;docker服务没有启动。 解决方法&#xff1a;执行 systemctl start docker 即可。

用于读取验证码的 OCR 模型

介绍 此示例演示了使用功能 API 构建的简单 OCR 模型。除了结合 CNN 和 RNN 之外,它还说明了如何实例化新层并将其用作“端点层”来实现 CTC 损失。 设置 import os import numpy as np import matplotlib.pyplot as pltfrom pathlib import Path from collections import Co…

基于STM32两轮自平衡小车系统设计与控制

**单片机设计介绍&#xff0c;1650【毕设课设】基于STM32两轮自平衡小车系统设计与控制 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 主控芯片用的是100脚的STM32F103VET6&#xff0c;陀螺仪用的是MPU6050&#xff0c;电机…

中微爱芯74逻辑兼容替代TI/ON/NXP工规品质型号全

这里写自定义目录标题 工业级型号全产品线概述![在这里插入图片描述](https://img-blog.csdnimg.cn/097ef810b2234f07b0c0c1e962a73761.png)批量应用行业头部客户兼容替代封装对照逻辑参数对比电平转换系列型号对照HC/HCT 系列型号对照AHC/AHCT 系列型号对照LV/LVC 系列型号对照…

带有 Vagrant 和 Virtualbox 的 Elasticsearch 集群

模拟分布式存储和计算环境的一种简单方法是使用 Virtualbox 作为 VM&#xff08;“虚拟机”&#xff09;的提供者&#xff0c;使用 Vagrant 作为前端脚本引擎来配置、启动和停止这些 VM。这篇文章的目标是构建一个集群虚拟设备&#xff0c;提供 Elasticsearch 作为可由主机使用…

计算机视觉-光源的目的和作用

光源的目的 机器视觉系统的核心是图像采集和图像处理&#xff0c;而光源则是影响图像水平的重要因素&#xff0c;通过适当的光源照明&#xff0c;使图像中的目标信息与背景信息得到更好的分离&#xff0c;可大大降低图像识别难度&#xff0c;提高系统的精度和可靠性。 对于机器…

【错误解决方案】ModuleNotFoundError: No module named ‘torch._six‘

1. 错误提示 在python程序中&#xff0c;试图导入一个名为torch._six的模块&#xff0c;但Python提示找不到这个模块。 错误提示&#xff1a;ModuleNotFoundError: No module named torch._six 2. 解决方案 出现这个错误可能是因为你使用的PyTorch版本和你的代码不兼容。在某…

Megatron-LM GPT 源码分析(三) Pipeline Parallel分析

引言 本文接着上一篇【Megatron-LM GPT 源码分析&#xff08;二&#xff09; Sequence Parallel分析】&#xff0c;基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale &#xff0c;通过GPT的模型运行示例&#xff0c;从三个维…

类与面向对象

章节目录&#xff1a; 一、面向对象二、类2.1 类定义2.2 类对象2.3 self 代表类的实例&#xff0c;而非类 三、类的方法四、多继承五、方法重写六、私有属性及私有方法七、类的专有方法八、专有方法重载九、结束语 一、面向对象 Python 从设计之初就已经是一门面向对象的语言。…

从一个页面跳转到目标页面之后,对应的顶部路由高亮

需求&#xff1a;页面跳转到目标页面之后&#xff0c;对应的顶部路由高亮 上面的更多 跳转到 学情分析下面的学生分析 <template><div class"topBar" ref"topBar" v-loading.fullscreen.lock"fullscreenLoading"><div class&quo…