SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping

embedded/2024/12/26 3:02:37/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

SpringMVC的URL组成

ip + 端口号 + 上下文 + 类上的@RequestMapping的URI + 方法上的@RequestMapping的URI

规则

  • 非空URI前会自动拼接/
  • 连续的斜杠会被替换成单个斜杠
  • 方法的URI前没有斜杠与只有一个斜杠的两种接口,同时存在时,拼接前面的斜杠后再替换重复斜杠,得到的结果相同,无法确定最终映射接口,有歧义,启动报错java.lang.IllegalStateException: Ambiguous mapping
  • 配置server.servlet.context-path上下文时,需手动添加前置斜杠,如 server.servlet.context-path=/my-context

演示代码

java">package com.example.controllerdemo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
// 类上的@RequestMapping的URI,前面是否有斜杠的结果相同,后面是否有斜杠会影响 @GetMapping() 不指定URI的请求地址
//@RequestMapping("easy")
//@RequestMapping("/easy")
@RequestMapping("easy/")
//@RequestMapping("/easy/")
//@RequestMapping("easy")
public class TestController {@GetMapping()public String test() {return "no";}// 请求地址 http://localhost:8080/my-context/easy/test@GetMapping("test")public String test1() {return "test";}// 前面没有斜杠或者只有一个斜杠,结果是相同的,两种接口同时存在时有歧义// 启动时无法确定用哪个,报错java.lang.IllegalStateException: Ambiguous mapping// 请求地址 http://localhost:8080/my-context/test,与 @GetMapping("test") 相同
//    @GetMapping("/test")
//    public String test2() {
//        return "/test";
//    }// 请求地址 http://localhost:8080/my-context/easy/test/@GetMapping("test/")public String test3() {return "test/";}//    @GetMapping("/test/")
//    public String test31() {
//        return "/test/";
//    }// 方法前的多个连续的斜杠会被处理成单个斜杠,虽然不会因为Ambiguous mapping启动报错,但无法被访问// 发送 http://localhost:8080/my-context/easy//test 请求会按照 http://localhost:8080/my-context/easy/test 处理@GetMapping("//test")public String test21() {return "//test";}}

http://www.ppmy.cn/embedded/148781.html

相关文章

点亮核心板小灯 STM32U575

将核心板上的运行状态指示灯点亮 任务分析 灯如何点亮 如何看开发板原理图 开发板上的灯硬件组成 原理图 原理图(Schematic Diagram),也称为电路图或电气图,是一种图形表示方法,用于展示电子系统或电路的工作原理和…

机器学习常用术语

目录 概要 机器学习常用术语 1、模型 2、数据集 3、样本与特征 4、向量 5、矩阵 6、假设函数与损失函数 7、拟合、过拟合与欠拟合 8、激活函数(Activation Function) 9、反向传播(Backpropagation) 10、基线(Baseline) 11、批量(Batch) 12、批量大小(Batch Size)…

第一节:电路连接【51单片机-L298N-步进电机教程】

摘要:本节介绍如何搭建一个51单片机L298N步进电机控制电路,所用材料均为常见的模块,简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机模块 ②恒流模块 ③开关电源 ④L298N模块 ⑤二相四线步进电机 ⑥电线若干 二、接线 三、L298N模…

XlDynamicFilterCriteria 枚举 (Excel)

在vba中使用Range.autoFilter时,第二个参数(条件criteria1)可以用以下参数。 文档链接:XlDynamicFilterCriteria 枚举 (Excel) | Microsoft ​​​​​​Office VBA 参考主题https://learn.microsoft.com/zh-cn/office/vba/api/ex…

单元测试(UT,C++版)经验总结(gtest+gmock)

最近做了一段测试工作,其中包括单元测试,编程语言是C。这里提供一些基本知识总结,方便入门单元测试。 1.单元测试介绍 单元测试(Unit Testing, 简称UT)是软件测试的一种方法,目的是通过对单个软件组件&am…

【RabbitMQ】【Laravel】【PHP】Laravel 中使用 RabbitMQ

在 Laravel 中使用 RabbitMQ,通常需要安装 RabbitMQ 客户端库,并在 Laravel 项目中进行适当配置。php-amqplib 是常用的 PHP RabbitMQ 客户端库,Laravel 也有一些扩展包,方便集成 RabbitMQ。下面是如何在 Laravel 中使用 RabbitMQ 的详细步骤: 1. 安装所需的扩展包 在 L…

项目搭建+姓名唯一性校验

一 : 添加时对姓名进行唯一性校验 ① : 给姓名绑定一个改变事件 ② : 取值 ③ : 组装对象 ④ : ajax (Controller定义对姓名唯一性校验的方法) 在成功回调函数里 判断姓名是否添加过(0>已添加 1>未添加) 未添加过,添加成功后,(清空) /*** 对姓名进行唯一性校验*/$("…

SpringMVC的响应处理

文章目录 1、传统同步业务数据响应2、前后端分离异步业务数据响应 1、传统同步业务数据响应 Spring怎么给客户端响应数据,响应数据主要分为两大部分: 传统同步方式:准备好模型数据,在跳转到执行页面进行展示,此方式使…