SpringMVC第四阶段:Controller中如何接收请求参数

news2024/9/29 23:23:10

Controller中如何接收请求参数

1、原生API参数类型

1.1、HttpServletRequest类

只需要在Controller的目标方法中, 直接写上HttpServletRequest对象即可获取 原生API的 request对象实例。

@RequestMapping(value = "/p1")
public String param1(HttpServletRequest request){
    System.out.println(" httpServletRequest对象 : " + request);
    System.out.println("获取请求的参数: " + request.getParameter("username"));
    System.out.println("获取工程路径: " + request.getContextPath());
    System.out.println("获取请求资源路径:  " + request.getRequestURI());
    return "ok";
}

1.2、HttpSession类 和HttpServletResponse类

@RequestMapping(value = "/p2")
public String param2(HttpSession session , HttpServletResponse response){
    System.out.println(" 会话id: " + session.getId());
    System.out.println(" 是否是新创建的: " + session.isNew() );
    System.out.println( "response对象" + response );

    return "ok";
}

以上这几个原生API 只需要在Controller 控制器的方法上直接写参数就可以获取,使用跟原来一样.

2、普通类型入参

/**
 * 在SpringMVC框架中,如果要获取请求的参数,只需要把参数直接写在Controller的方法上即可.<br/>
 *  注意点: <br/>
 *      1 参数的类型要一致 <br/>
 *      2 参数名要一致! <br>
 */
@RequestMapping(value = "/p3")
public String param3(String username,Integer age,String password){
    System.out.println("请求参数 username 的值是: " + username);
    System.out.println("年龄 : " + age);
    System.out.println("密码 : " + password);
    return "ok";
}

3、普通类型数组的参数

/**
 * 如果要使用SpringMVC获取多个参数值的时候,只需要直接写成数组即可!!! <br/>
 *  注意点: <br/>
 *      1 参数的类型要一致 <br/>
 *      2 参数名要一致! <br>
 */
@RequestMapping(value = "/p4")
public String param4(String[] hobby){
    System.out.println("兴趣爱好: " + Arrays.asList(hobby));
    System.out.println("爱好1 : " + hobby[0]);
    System.out.println("爱好2 : " + hobby[1]);
    return "ok";
}

4、普通类型使用@RequestParam入参

示例代码:

/**
 * 客户端的参数名是username, 服务器参数名是user. 是否可以取值.<br/>
 * @RequestParam(name = "username") String user  <br/>
 * 表示把请求参数 username 的值,赋给方法参数 user <br/>
 *
 * 如果没有传递就会报错. <br/>
 * required = false 表示客户端不传递不报错.值为null <br/>
 * defaultValue 表示默认值 <br/>
 * @param user
 * @return
 */
@RequestMapping(value = "/p5")
public String param5(@RequestParam(name = "username",required = false,defaultValue = "哟!!") String user){
    System.out.println("user的值是: " + user);
    return "ok";
}

如果指定的参数客户端 不传递 , 就会报以下错误。

在这里插入图片描述

5、@RequestHeader获取请求头入参

@RequestParam注解是获取指定请求参数的值注入到Controller方法参数中
@ReqeustHeader 注解是将指定请求头的值注入到Controller方法参数中

@RequestParam和@ReqeustHeader 注解的使用规则一样

@RequestMapping(value = "/p6")
public  String param6(@RequestHeader(name="User-Agent")  String userAgent
        ,@RequestHeader(name="Connection")String connection ){
    System.out.println("请求头 userAgent 的值是: " + userAgent);
    System.out.println("请求头 connection 的值是: " + connection);
    return "ok";
}

6、@CookieValue获取Cookie值入参

@CookieValue注解和@RequestParam注解和@ReqeustHeader 注解使用规则完全一样.
把请求的Cookie的值注入到Controller方法参数中

@RequestMapping(value = "/p7")
public  String param7(@CookieValue(name = "JSESSIONID") String jSessionId){
    System.out.println("Cookie jSessionId 的值是: " + jSessionId);
    return "ok";
}

@CookieValue注解:获取Cookie值注入方法参数
@RequestParam注解:获取客户端参数值注入方法参数
@ReqeustHeader 注解 :获取请求头注入方法参数

7、Pojo对象类型的参数

只需要注意请求的参数名要和JavaBean的属性名一致即可

表单:

<%--
  斜杠表示绝对路径.

  如果是浏览器解析 , 得到的路径是: http://ip:port/ <br/>

  如果是服务器解析 , 得到的路径是: http://ip:port/工程路径/
--%>
<form action="${pageContext.request.contextPath}/addperson" method="get">
  编号: <input id="id" name="id" /> <br>
  名称: <input id="name" name="name" /> <br>
  年龄: <input id="age" name="age" /> <br>
  电话: <input id="phone" name="phone" /> <br>
  <input type="submit" value="提交" />
</form>

JavaBean对象:

public class Person {
    private Integer id;
    private String name;
    private Integer age;
    private String phone;

}

Controller中的代码:

/**
 *  请求的参数名要和javaBean的属性名一致!!!
 */
@RequestMapping(value = "/addperson")
public String person(Person person){
    System.out.println("用户信息保存 ==>>> " + person);
    return "ok";
}

8、对象中套对象(级联属性)

表单:

<%--
  斜杠表示绝对路径.

  如果是浏览器解析 , 得到的路径是: http://ip:port/ <br/>

  如果是服务器解析 , 得到的路径是: http://ip:port/工程路径/
--%>
<form action="${pageContext.request.contextPath}/addperson" method="get">
  编号: <input id="id" name="id" /> <br>
  名称: <input id="name" name="name" /> <br>
  年龄: <input id="age" name="age" /> <br>
  电话: <input id="phone" name="phone" /> <br>
  <%--
    使用级联属性赋值
  --%>
  车名: <input id="car.name" name="car.name" /> <br>
  车牌: <input id="car.carNo" name="car.carNo" /> <br>
  <input type="submit" value="提交" />
</form>

JavaBean代码 :

public class Car {
    private String name;
    private String carNo;
}
public class Person {
    private Integer id;
    private String name;
    private Integer age;
    private String phone;
    private Car car;
}

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

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

相关文章

( 动态规划) 1035. 不相交的线 ——【Leetcode每日一题】

❓1035. 不相交的线 难度&#xff1a;中等 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足满足&#xff1a; nums1[i] nums2[j]且绘制的直线不…

Postman如何做接口测试?你居然还不知道

目录 Postman如何做接口测试1&#xff1a;如何导入 swagger 接口文档 Postman如何做接口测试2&#xff1a;如何切换测试环境 Postman如何做接口测试3&#xff1a;什么&#xff1f;postman 还可以做压力测试&#xff1f; Postman如何做接口测试4&#xff1a;如何自动添加请求…

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-自动变道-2

书接上回 2.3.4.3 系统主动变道 (1)变道需求输入 在NOA功能功能激活状态下,系统接收驾驶员请求或根据导航引导信息及道路环境信息获取变换车道的需求,包含导航引导路线的变道需求和智能避让变道需求。 导航引导变道需求 导航引导模式下的主动变道包括上高速由匝道并入主路、…

【前端知识】浅谈XSS和CSRF网络攻击

【前端知识】浅谈XSS和CSRF网络攻击 1. 常见的浏览器攻击2. XSS攻击2.1 定义2.2 类型2.2.1 Reflected XSS【反射型 - 非持久型 XSS】2.2.2 Stored XSS【存储型 - 持久型 XSS】2.2.3 DOM-based or local XSS【基于DOM或本地的XSS &#xff0c;非持久性】2.2.4 其他类型XSS攻击 2…

Python入门(十)用户输入

用户输入 1.概述2.函数input()的工作原理2.1 编写清晰的程序 3.使用int()来获取数值输入4.求模运算符 作者&#xff1a;xiou 1.概述 大多数程序旨在解决最终用户的问题&#xff0c;为此通常需要从用户那里获取一些信息。例如&#xff0c;假设有人要判断自己是否到了投票年龄。…

从C语言到C++_11(string类的常用函数)力扣58和415

目录 1. 学习string的铺垫 1.1 什么是string类 1.2 basic_string 模板类 1.3 编码表的由来 1.4 其它字符编码的string 2. string类对象的常见构造 3. sting类对象的容量操作 4. string类对象的访问及遍历操作 5. string类对象的修改操作 6. string类非成员函数 7. …

Unity之新版输入系统InputSystem如何自定义InputActions

一.前言 上一篇文章,我们介绍了如何使用新版本的InputSystem,我们知道了InputActionsAsset给我们提供了更多的灵活性,扩展性和复用性。那么这篇文章我们就来介绍一下如何创建自定义InputActionAsset 二.创建ActionAssets Input Action Asset 包含输入 Actions及其关联的B…

活动回顾|Kyligence x 亚马逊云科技,携手加速零售电商数智化转型

5月19日&#xff0c;Kyligence 与亚马逊云科技联合主办的「指标驱动&#xff0c;加速零售电商行业数智化转型」主题沙龙在上海成功举办。来自乐高、Kyligence、亚马逊云科技的专家分享了如何以数据和指标驱动&#xff0c;加速零售行业的数智化转型&#xff0c;并与现场观众进行…

【92】实测:访问不存在的function导致UR

前言 协议规定访问不存在的function会导致UR&#xff0c;今天我们就来实测一下。 这篇文章主要设计下面几个方面&#xff1a; 1、X86上的memory config 2、config方式访问不存在的设备导致UR 3、UR和advisory non fatal转换 4、header log解析 一、协议规定 协议规定如果…

SPI总线通讯协议学习

目录 什么是SPI 信号线 理解通讯原理 采样 SPI的推广 什么是SPI SPI是芯片与芯片之间的通讯,准确得说是串行同步通讯。既然都说了同步&#xff0c;那发送数据当然要和时钟线SCK配合才能发数据. 采用一主多从的模式&#xff0c;主机只有一个,而从机可以有若干个。 信号线 …

Java面试知识点(全)-Java并发-多线程JUC三- JUC集合/线程池

Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 JUC集合类 为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么? Hashtable之所以效率低下主要是因为其实现使用了synchro…

学习开源项目消息推送平台需要什么基础?

有很多人问过我&#xff0c;学习开源项目消息推送平台austin需要有什么基础&#xff0c;我往往会回答&#xff1a;有SpringBoot基础就够了。 我在几年前总结过从零学习Java的路线&#xff0c;现在看来也没有很过时&#xff1a; Java基础&#xff1a;流程控制–>面向对象(包…

文件上传,解析漏洞编译器安全(23)

apache低版本解析漏洞 这个网站目录里有两个文件&#xff0c;一个是正常的php文件&#xff0c;另一个xx.php.xxx&#xff0c;源码是php源码&#xff0c;命名的文件&#xff0c;而访问中xxx的文件依旧可以执行出php代码的结果&#xff0c;而xxx就能当php文件解析&#xff0c;这…

【Linux】shell脚本编程

C/C与shell的区别 C/C是编译型 编译链接xx.c->xx 二进制机器指令 shell编程解释型 xx.sh 需要解释器&#xff08;如&#xff1a;bash&#xff09; Java 解释器编译 xx.java->xx.class 配置环境 输出一个hello my.sh #!/usr/bin/bash/echo"hello"ex…

php中Ajax的简单使用,登录表单调用Ajax判断是否正确登录利用layer.msg进行提示

php中Ajax的简单使用 jQuery中如何使用Ajax&#xff1f; jQuery 中封装了两个方法 get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。 两种在客户端和服务器端进行请求-响应的常用方法是&#xff1a;GET 和 POST。 GET - 从指定的资源请求数据POST - …

Postman集合/文件夹/请求中脚本的执行顺序

Postman的Collection(集合)/Folder(集合的子文件夹)/Request(请求)中都有Pre-request Script(请求前脚本)和Tests(请求后脚本) 这个功能类似于不同范围的Test Fixture功能, 我们来探索3个问题: 脚本的执行顺序?保存在集合/子文件夹中的请求单独发送时是否会执行 集合以及子文…

css自定义变量

文章目录 学习链接1.什么是CSS变量?2.如何定义CSS变量?定义CSS变量示例 3.如何使用CSS变量?使用示例 4.CSS变量可以干什么用?1. 提取相同的属性值风格切换简单案例index.htmlindex.css 2. 简化相似的代码案例实现1案例实现2index.html index.css 5.作用域问题案例index.htm…

【数据结构】--单链表力扣面试题③找链表的中间节点

目录 法一&#xff1a;遍历链表法 法二、快慢指针法 题述&#xff1a;给定一个头结点为head的非空单链表&#xff0c;返回链表的中间节点。如果有两个中间节点&#xff0c;则返回第二个中间节点。 示例1&#xff1a; 输入&#xff1a;【1,2,3,4,5】 输出&#xff1a;此链表…

〖Web全栈开发④〗— HTML基础详讲(超详细)

HTML基础详讲 &#xff08;一&#xff09;HTML基础1.1浏览器发展史1.2浏览器的诞生和发展 &#xff08;二&#xff09; 什么是网页2.1 网站是什么&#xff1f;2.2 什么是网站2.3 网站服务器2.4 总结 &#xff08;三&#xff09;HTML基础3.1 什么是HTML3.2 HTML标签3.3 实例3.4 …

为什么每个C程序都需要一个叫做 main 的函数?

文章目录 1、为什么每个C程序都需要一个叫做main的函数&#xff1f;2、为什么 C 的 main 函数可以通过调用 exit 或者执行一条 return 语句来结束&#xff0c;或者两者都不做&#xff0c;而程序依然可以正确终止&#xff1f; 1、为什么每个C程序都需要一个叫做main的函数&#…