SpringMVC处理请求映射路径和接收参数

目录

springmvc处理请求映射路径

案例:访问 OrderController类的pirntUser方法报错:java.lang.IllegalStateException:映射不明确

核心错误信息

springmvc接收参数

一 ,常见的字符串和数字类型的参数接收方式

1.1 请求路径的参数名和业务方法中的参数名保持一致的情况

1.2 请求路径参数名和业务方法中参数不同名的情况

二,请求路径传参是实体对象时

三,请求路径传参的实体对象中还有实体对象

四,接收数组类型的参数

五,接收集合类型的参数

六,接收json格式的参数

6.1,json转成实体对象

6.2,json转成集合对象

6.3,json转成集合对象,集合中存放的是实体对象

七,日期类型参数传递


springmvc处理请求映射路径

场景:在实际的应用开发中,需要写不同的模块,在这些模块中,不同的方法可能具有相同的映射路径如 订单模块,用户登录模块,他们在方法上映射路径都是/user。 这就会导致无法准确找到目标方法报错。


案例:访问 OrderController类的pirntUser方法报错:java.lang.IllegalStateException:映射不明确

UserController类

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class UserController {/*在Java的Spring MVC中,如果返回的字符串在浏览器中显示为乱码(如三个问号),通常是因为响应内容的字符编码设置不正确。设为utf-81 在@RequestMapping中指定produces属性 设置为utf-82 使用@RestController注解 默认使用utf-8编码*/@RequestMapping(value = "/user",produces = "text/plain;charset=utf-8")@ResponseBodypublic String printloginInfo(){System.out.println("打印登录用户信息。。。。");return "打印登录用户信息。。。。。";}
}

OrderController类

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class OrderController {@RequestMapping(value = "/user", produces = "text/plain;charset=utf-8")@ResponseBodypublic String pirntUser(){System.out.println("打印订单中顾客信息。。。。");return "正在打印订单中顾客信息....";}
}

测试:报500服务器内部错误!

核心错误信息

/*
原因:java.lang.IllegalStateException:映射不明确。无法映射“userController”方法
控制器。用户控制器#登录(字符串,String)
对于{[/user],生成[text/plain;charset=utf-8]}:已经存在'orderController'bean方法
*/
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method 
controller.UserController#login(String, String)
to { [/user], produces [text/plain;charset=utf-8]}: There is already 'orderController' bean method

解决办法:在controller类上使用@RequestMapping("类路径"),进一步区分不同模块的方法

这里在OrderController类上,添加一级目录,进一步完善对方法的访问

注意:我把写在类上的@RequestMapping 称为 “一级目录”;写在方法上的称为“二级目录”

测试:

访问OrderController类的方法成功!

访问UserController类方法成功!


springmvc接收参数

一下案例,皆使用Apifox,模拟请求发送


一 ,常见的字符串和数字类型的参数接收方式

1.1 请求路径的参数名和业务方法中的参数名保持一致的情况

案例

测试结果


1.2 请求路径参数名和业务方法中参数不同名的情况

大家,请看,如果修改请求参数名,当请求参数与映射参数不一致时,就会报错!

测试


解决办法:使用@RequestParam 注解,写在参数上

@RequestParam:给映射参数写别名

测试

二,请求路径传参是实体对象时

场景1 :访问printUser1方法返回user对象

在这一个过程中,我出现的问题(可选):

1 一直无法将user对象转成json格式

1.1 添加json格式依赖

1.2 springmvc 消息转成器 配置类

1.3 在springmvc配置类中加载config所在包

1.4 在RequestMapping注解 要求user对象使用json格式

----------解决:springmvc工程 响应时,将实体类对象 转换成json格式数据-CSDN博客


User实体类

使用Apifox发送请求

//传递对象@RequestMapping(value = "/user2", produces = "application/json")public User printUser1(User user) {System.out.println(user);return user;}

测试


三,请求路径传参的实体对象中还有实体对象

    // 传递 对象嵌套@RequestMapping("/user3")public User printUser2(User user) {System.out.println(user);return user;}

测试


四,接收数组类型的参数

  // 传递数组@RequestMapping("/user4")public String printUser3(String[] name) {for (String s : name) {System.out.println(s);}return "success";}

测试


五,接收集合类型的参数

    //传递集合@RequestMapping("/user5")public String printUser4(@RequestParam List<String> name){for (String s : name) {System.out.println(s);}return "success";}

测试


六,接收json格式的参数

须知:客户端向服务器,发送数据都是以json格式传递的

如果要使用json格式接收请求参数要求:

1 引用json格式依赖

<!-- Jackson核心库 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.13.0</version></dependency><!-- Jackson数据绑定库 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.4.2</version></dependency>

2 使用@EnableWebMvc 注解,开启json 

3在controller类方法上使用@RequestBody注解

@RequestBody注解作用

1 将json数据实现对实体类对象的转换


6.1,json转成实体对象
//json格式传递对象@RequestMapping("/user6")public User printUser5(@RequestBody User user){System.out.println(user);return user;}

测试


6.2,json转成集合对象
//json格式传递集合@RequestMapping("/user7")public String printUser6(@RequestBody List<String> name){for (String s : name) {System.out.println(s);}return "success";}

测试


6.3,json转成集合对象,集合中存放的是实体对象
//json格式对象嵌套传递@RequestMapping("/user8")public User printUser7(@RequestBody User user) {System.out.println(user);return user;}


七,日期类型参数传递

当日期类型的格式是年/月/日这种时,只需要用Date类对象接收就可以了,

但是当格式是年-月-日这种时,就需要用注解@DateTimeFormat(pattern = "yyyy-MM-dd")来进行处理才不会报错。具体案例看下图:

总结

@DateTimeFormat注解作用:将传入的字符串参数转换为 Date 类型

按照指定格式输出 Date 对象,就得运用 SimpleDateFormat 类来进行格式化


    @RequestMapping("/user9")public String printUser8(Date date1,@DateTimeFormat(pattern = "yyyy-MM-dd")Date date2, @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss") Date date3) {System.out.println("date1"+date1);System.out.println("date2"+date2);System.out.println("date3"+date3);return "success"+date1+date2+date3;

测试

控制台输出:

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

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

相关文章

在 Windows 系统上升级 Node.js

一、查询电脑端已经安装的 Node.js 版本 1、通过【winR】 键&#xff0c;输入 cmd&#xff0c;点击【确定】按钮打开 cmd 窗口 2、命令行界面输入 node -v 查看目前 Node.js 版本 3、命令行界面输入 npm -v 查看目前 npm 版本 二、进入官网地址下载安装包 1、官网地址&#x…

深入详解人工智能数学基础——概率论中的马尔可夫链蒙特卡洛(MCMC)采样

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

C++ 嵌套类 (详解 一站式讲解)

目录 嵌套类 嵌套类的定义 嵌套类结构的访问权限 pimpl模式&#xff08;了解&#xff09; 嵌套类 嵌套类的定义 首先介绍两个概念&#xff1a; 类作用域&#xff08;Class Scope&#xff09; 类作用域是指在类定义内部的范围。在这个作用域内定义的成员&#xff08;包括…

tcp 和http 网络知识

1. 请简述TCP和HTTP的定义与基本概念 TCP&#xff1a;即传输控制协议&#xff08;Transmission Control Protocol&#xff09;&#xff0c;是一种面向连接的、可靠的、基于字节流的传输层通信协议。它为互联网中的数据通信提供稳定的传输机制&#xff0c;在不可靠的IP层之上&a…

MySQL安装的多个组件中无用组件卸载

在决定卸载MySQL的哪些组件前&#xff0c;需根据你的实际使用场景判断。以下是各组件的主要功能及卸载建议&#xff1a; 1. 核心组件卸载建议 组件名称作用是否可卸载MySQL Server数据库服务核心&#xff0c;存储数据、处理SQL请求的核心程序。不可卸载 &#xff08;卸载会导致…

CosyVoice 技术全景解析:下一代语音生成模型的革命性突破

目录 一、CosyVoice 模型概述 1. 背景与定位 二、技术架构与创新 1. 核心架构设计 2. 关键技术亮点 三、行业地位与竞品对比 1. 市场定位分析 2. 竞争优势 四、部署方案与硬件成本 1. 硬件需求 2. 优化技巧 五、优势与挑战 1. 核心优势 2. 主要挑战 六、开源生态…

rabbitmq-集群部署

场景&#xff1a;单个pod&#xff0c;部署在主节点&#xff0c;基础版没有插件&#xff0c;进阶版多了一个插件 基础版本&#xff1a; --- apiVersion: v1 kind: PersistentVolume metadata:name: rabbitmq-pv spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorage…

[密码学实战]商用密码产品密钥体系架构:从服务器密码机到动态口令系统

[密码学实战]商用密码产品密钥体系架构:从服务器密码机到动态口令系统 关键词:商用密码、密钥体系、服务器密码机、金融数据密码机、动态口令、智能密码钥匙 摘要:本文深度解读商用密码产品的核心密钥体系架构,涵盖服务器密码机、金融数据密码机、VPN产品、动态口令系统及…

【unity游戏开发入门到精通——UGUI】UI事件监听接口

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——UGUI】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言1、什么是UGUI事件接口&#xff1f;2、想要监听事件步骤 一、事件接口1、U…

Spark知识总结

宽窄依赖&#xff1a;父RDD的分区只对应下面子RDD的一个分区&#xff0c;为窄依赖。其余为宽依赖 维度‌‌窄依赖‌‌宽依赖‌数据传输无shuffle&#xff0c;本地处理14需shuffle&#xff0c;跨节点传输14并行度高&#xff08;允许流水线并行&#xff09;57低&#xff08;需等…

铭记之日(3)——4.28

铭记之日(3)——4.28 25.4.28&#xff0c;绝对是继20.12.19与24.6.26之后&#xff0c;又一个被钉在耻辱柱上的日子。 4.28本质上为12.19的严重恶劣版。 道德败坏、恶劣的大骗子终于在今日穿帮落马。 斯文面孔下&#xff0c;竟藏匿了如此罪恶幽暗混沌的内心。 24.10.20&…

第16节:传统分类模型-支持向量机(SVM)在图像分类中的应用

一、引言 支持向量机(Support Vector Machine, SVM)作为一种经典的机器学习算法&#xff0c;自20世纪90年代由Vapnik等人提出以来&#xff0c;在模式识别和分类任务中表现出卓越的性能。 在深度学习兴起之前&#xff0c;SVM长期占据着图像分类领域的主导地位&#xff0c;即使…

《系统分析师-第三阶段—总结(六)》

背景 采用三遍读书法进行阅读&#xff0c;此阶段是第三遍。 过程 本篇总结第11章第12章的内容 第11章 第12章 总结 软件架构设计是宏观&#xff0c;基本架构确定之后&#xff0c;开始了系统化设计&#xff0c; 系统设计中对应的基本部分的知识较多&#xff0c;基础知识是第…

new的使用

上次堆区的介绍中&#xff0c;我们提到了一个关键字new&#xff0c;那今天我们就详细讲讲它 今天我们主要将两个内容 1.new的基本语法 2.用new创建数组 1.new的基本语法 new,可以在堆区中创建空间&#xff0c;来存放数据&#xff0c;就比如像下面这样 int* p new int(29);//n…

使用python实现自动化拉取压缩包并处理流程

使用python实现自动化拉取压缩包并处理流程 实现成果展示使用说明 实现成果展示 使用说明 执行./run.sh 脚本中的内容主要功能是&#xff1a; 1、从远程服务器上下拉制定时间更新的数据 2、将数据中的zip拷贝到指定文件夹内 3、解压后删除所有除了lcm之外的文件 4、新建一个ou…

香橙派打包qt文件报错“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案

PyQt 报错总结&#xff1a;打包文件过程&#xff0c;“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案全解析 在使用 PyQt5 搭建图形界面时&#xff0c;打包文件的过程中出现的问题&#xff0c;真难绷&#xff0c;搞了半天。 Qt 平台插件 xcb 无法加载QOb…

Missashe考研日记-day29

Missashe考研日记-day29 1 专业课408 学习时间&#xff1a;3h学习内容&#xff1a; 今天先是把虚拟存储剩余的课听完了&#xff0c;然后就是做课后选择题&#xff0c;57道&#xff0c;已经接受了OS课后题尤其多的事实了。解决并且理解完习题之后就开始预习文件管理的内容&…

【Linux】第十二章 安装和更新软件包

目录 1. 什么是RPM&#xff1f; 2. dnf是什么&#xff0c;它和rpm有什么联系和区别&#xff1f; 3. RHEL 中如何做才能启用对第三方存储库的支持&#xff1f; 4. 怎么理解RHEL9中的应用流(Application Streams)和模块(Modules)&#xff1f; 5. RHEL9 有两个必要的软件存储…

新时代下的存储过程开发实践与优化

随着现代应用系统的复杂度不断增加&#xff0c;数据库作为核心的数据存储和处理引擎&#xff0c;其性能和可靠性显得尤为重要。存储过程&#xff08;Stored Procedure&#xff09;作为一种封装在数据库中的应用逻辑&#xff0c;使得开发者能够在数据库层面实现数据操作、数据校…

从梯度消失到百层网络:ResNet 是如何改变深度学习成为经典的?

自AlexNet赢得2012年ImageNet竞赛以来&#xff0c;每个新的获胜架构通常都会增加更多层数以降低错误率。一段时间内&#xff0c;增加层数确实有效&#xff0c;但随着网络深度的增加&#xff0c;深度学习中一个常见的问题——梯度消失或梯度爆炸开始出现。 梯度消失问题会导致梯…