SpringMVC中有关请求参数的问题(映射路径,传递不同的参数)

目录

请求映射路径

get请求与psot请求发送普通参数

get请求发送参数

post请求发送参数

post请求乱码问题 

5种参数类型传递

普通参数传递(不同名)

实体类对象传递

数组传递

集合参数

json数据传递参数

JSON数组

JSON对象

​编辑

JSON引用集合

日期型参数传递


请求映射路径

问题:在团队多人开发中,每人设置不同的请求路径,冲突问题该如何解决...

    示例:在controller包下,有两个类下的方法设置的请求路径均为/save

@RequestMapping("/save")@ResponseBodypublic String Book(){System.out.println("book save......");return "{'module':'book koob'}";}
@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("user save");return "{'module':'user save'}";}

   这种情况下运行项目会报错。可以设置模块名作为请求路径前缀

@RequestMapping("/book/save")@ResponseBodypublic String Book(){System.out.println("book save......");return "{'module':'book koob'}";}
@RequestMapping("/user/save")@ResponseBodypublic String save(){System.out.println("user save");return "{'module':'user save'}";}

    除了在方法上指定请求路劲,也可以在类上使用@RequestMapping设置路径前缀,相当于给该类下的所有路径都添加上了相同的前缀

@RequestMapping("/book")
public class BookController {@RequestMapping("/save")@ResponseBodypublic String Book(){System.out.println("book save......");return "{'module':'book koob'}";}
}

get请求与psot请求发送普通参数

    在controller类接收参数,只需要添加参数列表,即可直接引用:

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(String string,int age){System.out.println("普通参数传递 string == >"+ string);System.out.println("普通参数传递 age == >"+ age);return "{'module':'user save'}";}
}

get请求发送参数

    get发送请求参数,只需要在url后接 ?key=value&key1=value1.....

 

post请求发送参数

    post请求参数在请求体中,所以下方按钮要选择Body,再选择x-www-form-urlencoded(编码表单)。

补充:

  • form-data(表单数据):传文件或混合文本和文件数据。

  • x-www-form-urlencoded(编码表单):提交简单键值对数据(无文件)。

  • raw(原始数据):发送 JSON、XML 等结构化数据。

  • binary(二进制文件):直接上传二进制文件(如图片、视频)。

post请求乱码问题 

    上面post请求传递的参数在控制台显示乱码,解决方案

设置过滤器:

servlet容器中进行乱码处理,重写getServletFilters()方法

    @Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("UTF-8");return new Filter[]{filter};}

重新发送请求,此时乱码问题已解决:

5种参数类型传递

普通参数传递(不同名)

    当传递的参数key值与方法的参数列表名不一致时,会出现参数无法传递的情况:

 解决方案

在控制器类对应的方法参数前,添加@RequestParam("对应的参数名"):

public String save(@RequestParam("name") String string, int age){System.out.println("普通参数传递 string == >"+ string);System.out.println("普通参数传递 age == >"+ age);return "{'module':'user save'}";}

    此时可以成功传递参数,但是用原来的参数名会报错

实体类对象传递

准备了一个实体类,接下来就将该类的对象作为参数传递:

public class User {private String name;private int age;@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
    @RequestMapping("/pojo")@ResponseBodypublic String pojoParam(User user){System.out.println("pojo参数传递===="+user);return "{'module':'pojo param'}";}

可以直接使用对象属性名进行参数传递:


    当类的属性里有其他对象时:

public class Person {private int height;private int weight;@Overridepublic String toString() {return "Person{" +"height=" + height +", weight=" + weight +'}';}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}
}

 普通属性直接使用属性名,引用类型使用pojo.属性名传递

    @RequestMapping("/pojoCoin")@ResponseBodypublic String pojoCoinPojo(User user){System.out.println("pojo参数传递===="+user);return "{'module':'pojo param'}";}

数组传递

    当传入的参数为数组时,url参数的key只需使用相同的命名即可

    @RequestMapping("/arr")@ResponseBodypublic String pojoCoinPojo(String[] arr){System.out.println("pojo参数传递===="+ Arrays.toString(arr));return "{'module':'array param'}";}

 

集合参数

    传入的参数为集合时,需要再list参数前加上注解@RequestParam,传递时只需key相同即可。

    @RequestMapping("/list")@ResponseBodypublic String listParam(@RequestParam List<String> lists){System.out.println("pojo参数传递===="+ lists);return "{'module':'list param'}";}

json数据传递参数

JSON数组

在实验之前,首先要导入jackson-databind依赖:

    <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.5</version></dependency>

想要传递json数据,点击Body,数据格式选择raw,右侧选择JSON,使用get和post提交都可。

还需要再springmvc配置类中加上注解: @EnableWebMvc 。在Controller类的方法参数前也要加上注解@RequestBody

    //json集合参数@RequestMapping("/listJSON")@ResponseBodypublic String listJSONParam(@RequestBody List<String> lists){System.out.println("JSON数组传递===="+ lists);return "{'module':'listJSON param'}";}

   

JSON对象

    JSON对象的传递与JSON数组的传递只在传递的JSON格式不同,其他完全相同

    仍要注意传入的JSON对象的key值要和方法参数列表的对象属性的属性名一致,否则接收不到。引用类型的数据则是用属性名再用大括号包裹它对应的属性

JSON引用集合

    传入的参数还可以是引用类型的集合,仅有参数列表和传入的数据形式改变:

    //json的对象集合@RequestMapping("/pojoJSONList")@ResponseBodypublic String pojoJSONParam(@RequestBody List<User> users){System.out.println("JSON引用集合传递===="+ users);return "{'module':'pojoJSONList param'}";}

日期型参数传递

日期类型的数据基于系统的不同格式也不同:

  • 2024-10-01
  • 2024/10/01
  • 01/10/2024

斜线格式的处理方法如下:直接使用date类型的参数

    @RequestMapping("/dateParam")@ResponseBodypublic String dataParam(Date date){System.out.println("日期类型的参数===="+ date);return "{'module':'date param'}";}

   传递的参数为其他格式时,需要加上注解@DateTimeFormat(pattern="日期格式")来指定日期格式。

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

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

相关文章

图片查看器:用PyQt5实现本地图片预览工具

通过python代码&#xff0c;基于PyQt5实现本地图片预览查看工具。 我们对窗口进行了圆角设计&#xff0c;图片的翻页按钮半透明处理&#xff0c;当鼠标移动至按钮上的动画效果&#xff0c;当选择某一张图片&#xff0c;进行左右翻页则轮播同目录所有支持的图片格式。 import …

算法优选系列(1.双指针_下)

目录 五. 有效三角形的个数&#xff08;medium&#xff09; 题目链接&#xff1a;有效三角形的个数 解法: 代码&#xff1a; 六&#xff1a;和为 s 的两个数字&#xff08;easy&#xff09; 题目链接&#xff1a;和为 s 的两个数字 解法&#xff1a; 代码; 七&#xf…

【数据结构】2算法及分析

0 章节 &#xff11;&#xff0e;&#xff14;到1&#xff0e;&#xff15;小节。 掌握算法概念、特性、描述、算法性能时间复杂度和空间复杂度&#xff1b; 理解递归含义&#xff1f; 掌握实现递归的条件和时机&#xff1b; 应用简单递归问题的算法设计&#xff1b; 重点 算法…

要在Unreal Engine 5(UE5)中实现角色打击怪物并让怪物做出受击反应,

UE5系列文章目录 文章目录 UE5系列文章目录前言一、实现思路二、最终效果 前言 ue5角色受击没有播放受击动画&#xff0c;主角达到怪物身上没有反应 一、实现思路 要在Unreal Engine 5&#xff08;UE5&#xff09;中实现角色打击怪物并让怪物做出受击反应&#xff0c;你需要…

Java糊涂包(Hutool)的安装教程并进行网络爬虫

Hutool的使用教程 1&#xff1a;在官网下载jar模块文件 Central Repository: cn/hutool/hutool-all/5.8.26https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.26/ 下载后缀只用jar的文件 2&#xff1a;复制并到idea当中&#xff0c;右键这个模块点击增加到库 3&…

C++从零实现Json-Rpc框架

文章目录 一、项目介绍1. 基本原理2. 涉及到的技术栈3. 最终实现的效果 二、 第三方库的介绍与使用1. JsonCpp库Json的数据格式JsonCpp介绍封装Json工具类 2. muduo库muduo库是什么Muduo库常见接口介绍 3. C11异步操作std::future 三、框架设计1. 服务端模块划分NetworkProtoco…

用伪元素和jquery实现tab标签切换(下标线样式)

HTML代码 <div class"title"><div class"tab-item active">按场景</div><div class"tab-item">按名称</div><div class"tab-item">按手机号</div> </div> CSS代码 .active{positio…

Python写一个查星座的小程序,适合初学者练手——字典和if语句练习

一、界面预览 二、完整代码 # 导入必要的库 import tkinter as tk from tkinter import ttk # 导入ttk模块用于更现代的控件 from PIL import Image, ImageTk # 用于处理图片 import os # 用于文件路径操作class ZodiacApp:def __init__(self, root):self.root rootself.r…

【A2DP】蓝牙A2DP协议剖析:从架构到规范

目录 一、A2DP 协议架构 1.1 A2DP 协议栈结构组成 1.2 协议栈各部分的关系与作用 二、设备配置与角色定义&#xff08;Configurations and roles &#xff09; 2.1 角色定义 2.2 配置示例与角色体现 三、用户需求与场景 3.1 用户需求与场景 3.2 协议限制 3.3 协议要求…

C语言for循环语句的用法(非常详细)

在 C语言中&#xff0c;除了 while 和 do while&#xff0c;使用 for 语句也可以实现循环结构。 C语言for循环的基本用法 for 循环语句的一般形式如下&#xff1a; for(表达式1;表达式2;表达式3) {语句块; } 有以下几点说明&#xff1a; for 是循环结构中的关键字之一。表…

Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能

Flutter 学习之旅 之 flutter 不使用插件&#xff0c;实现简单带加载动画的 LoadingToast 功能 目录 Flutter 学习之旅 之 flutter 不使用插件&#xff0c;实现简单带加载动画的 LoadingToast 功能 一、简单介绍 二、LoadingToast 三、简单案例实现 四、关键代码 一、简单…

289. 生命游戏

根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态&#xff1a; 1 即为 活细胞 &am…

滑动窗口及边缘化直观理解

文章目录 问题例子example求解思路边缘化边缘化原理边缘化的实际步骤marg先验约束公式先验约束公式1先验约束公式2 marg的问题及FEJ实例分析&#xff1a;VINS-Mono中的滑动窗口策略 边缘化的代码实现&#xff08;伪代码&#xff09; 参考 本文简要介绍VIO常用的滑动窗口及边缘化…

类和对象(下)

一.再谈构造函数 构造函数有构造函数体赋值实现和初始化列表两种方式 1.构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值. 虽然上述构造函数调用之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是…

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧

目录 引言 一、历史中的非对称作战&#xff1a;从李牧到八路军的智谋传承 李牧戍边&#xff1a;古代军事博弈中的资源重构 八路军的游击战&#xff1a;现代战争中的智慧延续 二、创业界的逆袭之道&#xff1a;小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …

eLection: 1靶场渗透测试

eLection: 1 来自 <eLection: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.196 3&#xff0c;对靶机进行端口服…

RuleOS:区块链开发的“新引擎”,点燃Web3创新之火

RuleOS&#xff1a;区块链开发的“新引擎”&#xff0c;点燃Web3创新之火 在区块链技术的浪潮中&#xff0c;RuleOS宛如一台强劲的“新引擎”&#xff0c;为个人和企业开发去中心化应用&#xff08;DApp&#xff09;注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…

【MySQL篇】MySQL基本查询详解

目录 前言&#xff1a; 1&#xff0c;Create 1.1&#xff0c;单行数据全列插入 1.2&#xff0c;单行数据指定列插入 1.3&#xff0c;多行数据全列插入 1.4&#xff0c;多行数据指定列插入 1.5&#xff0c;插入否则更新 1.6&#xff0c;替换 2&#xff0c;Retrieve …

第十七:go 反射

fmt.printf("%T"&#xff0c;obj) // 打印 reflect 的类型 fmt.Printf("%T", obj) // *reflect.rtype //打印的是一个指针类型 reflect包 在Go语言中反射的相关功能由内置的reflect包提供&#xff0c;任意接口值在反射中都可以理解为由reflect.Type和…

热门的壁纸创作风格呈现多元化发展趋势

下热门的壁纸创作风格呈现多元化发展趋势&#xff0c;以下是几种主流风格及其特点&#xff1a; 简约现代风格 流行元素&#xff1a;以简洁的线条、纯净的色彩块面和少量的抽象图形为主。摒弃过多繁杂的装饰&#xff0c;强调形式追随功能的设计理念。热度分析&#xff1a;在各大…