【SpringMVC】SpringMVC中单元方法获取请求数据的方式

目录

1.概念

2.紧耦方式

3.解耦方式

[3.1 获取请求中内容](#3.1 获取请求中内容)

3.1.1获取普通表单参数

[3.1.2@RequestParam 注解的使用](#3.1.2@RequestParam 注解的使用)

[3.1.3 使用类对象作为控制单元参数](#3.1.3 使用类对象作为控制单元参数)

3.1.4JavaBean 和简单数据类型混合使用

3.1.5接收多个同名表单参数

[3.1.6 接收日期类型参数](#3.1.6 接收日期类型参数)

[3.1.7 接收请求头数据](#3.1.7 接收请求头数据)

[3.2 设置作用域的值](#3.2 设置作用域的值)

[3.3 设置响应内容](#3.3 设置响应内容)


1.概念

控制单元方法参数一共有两种写法:

(1)紧耦方式。获取原生 Servlet API,通过原生 Servlet API 获取请求参数、设置响应内容、 设置作用域的值。

(2)解耦方式。使用 Spring MVC 提供的方式获取请求参数、设置响应内容、设置作用域的 值。

2.紧耦方式

  • 之前在学习 Servlet 时,Servlet 中 service 方法参数为 HttpServletRequest、 HttpServletResponse,通过这两个对象可以获取到 HttpSession、ServletContext、 PrintWriter 等其他常用对象。
  • 在 Spring MVC 中,可以直接在控制单元的方法参数中按需注入 HttpServletRequest、 HttpServletResponse、HttpSession 对象。注入后就可以像之前学习 Servlet 一样进行获取参 数

输出响应内容也和之前学习 Servlet 的时候是类似的,但是需要注意控制单元返回值为 void。

作用域传值也是和之前 Servlet 中学习的一样,只需要在参数中注入作用域对象就可以了。但 是需要注意 ServletContext 不能直接注入,需要通过其他对象获取。HttpServletRequest 和 HttpSession 可以注入。

3.解耦方式

3.1 获取请求中内容

3.1.1获取普通表单参数

获取普通表单参数,只需要包含在控制单元中提供与请求参数同名的方法参数即可。Spring MVC 会自动进行类型转换

注意:如果在控制单元方法参数中提供了参数。但是在请求中没有对应参数,这 时 Spring MVC 会把 null 值赋予给参数。所以一些有经验的开发者在 Spring MVC 的参数中都是用封装类型。这样即使是 null 值也能正 常接收。

3.1.2@RequestParam 注解的使用

概念:

  • @RequestParam 是方法参数级注解。每个控制单元方法参数前面都能写这个注解。这个注解的作用是起别名,给默认值,限制参数是否必须携带等。

属性:

  • name:当请求参数名和控制单元参数名不对应时,可以使用 name 指定请求参数名。这 样方法参数就可以不与请求参数对应了。
  • value:是 name 属性的别名。功能和 name 属性相同。之所以再次设置一个和 name 属 性相同的 value,是因为在 Java 注解中,当需要设置 value 属性,且只需要设置 value 属性时 可以省略 value 属性名,这样写起来更加简单,就是你不用这样写了(name = "name")直接写成这样("name")。
  • defaultValue:默认值。表示当请求参数中没有这个参数时给与的默认值。 defaultValue 类型是 String 类型,Spring MVC 会对值进行类型转换,转换成参数类型。
  • required:boolean 类型,表示请求中是否必须包含参数。如果设置为 true,且请求中没有这个参数,响应时出现 400 状态码。

3.1.3 使用类对象作为控制单元参数

当使用类对象作为参数时,要求属性名和参数名对应,类型转换由 Spring MVC 自动完成。不 支持@RequestParam 注解。所以需要先建立一个类。且类中必须提供属性的 getter 和 setter 方法,因为 Spring MVC 就是通过 getter 和 setter 把请求参数的值设置到类的属性中。

3.1.4JavaBean 和简单数据类型混合使用

当两种方式都使用 时,且类中和简单类型重名时,Spring MVC 会"雨露均沾"都给设置上。

3.1.5接收多个同名表单参数

  • 在提交表单数据时,可能在里面包含复选框。当选中多个复选框时会出现多个同名参数。在 Spring MVC 中可以使用数组和 List 接收多个同名参数。
  • 当使用数组进行接收时,需要(List)数组对象名和请求参数名一致。如果不想一致,可以使用 @RequestParam("hovers")定义请求参数名。

3.1.6 接收日期类型参数

如果希望使用 Date 类型接收客户端传递过来的数据,默认情况下必须保证客户端参数格式和 服务器日期格式一致。

注:如果不写@DateTimeFormat ,默认情况下用 "/ "也可以,空格不行。

3.1.7 接收请求头数据

在 HTTP 协议中,请求头参数会有很多。如果希望接收请求头数据可以用@RequestHeader 进行接收。

请求头一般包括下面的内容

3.2 设置作用域的值

  • 传统的作用域对象

request: 一次请求内,请求转发的时候使用

session: 一次会话,用户的不同请求之间的数据共享

application: 不同用户的数据共享

  • SpringMVC提供的作用域对象

Model对象:只需要在控制单元方法参数中添加 Model 对象,对象名称任意。 如果使用Jsp页面技术,在 Model 接口中有很多个方法,里面最常用的有两个 addAttribute(String,Object)和 addAllAtributes(Map)底层仍然是request对象!

单元方法

页面如下

访问后

3.3 设置响应内容

这里设计中文乱码等问题的解决,暂时省略。

相关推荐
编程小白gogogo26 分钟前
苍穹外卖图片不显示解决教程
java·spring boot
舟舟亢亢32 分钟前
算法总结——二叉树【hot100】(上)
java·开发语言·算法
百锦再1 小时前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
上进小菜猪1 小时前
基于 YOLOv8 的水体污染目标检测系统 [目标检测完整源码]
后端
努力努力再努力wz2 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
yy.y--3 小时前
Java数组逆序读写文件实战
java·开发语言
BD_Marathon4 小时前
IDEA创建多级包时显示在同一行怎么办
java·ide·intellij-idea
亓才孓4 小时前
【Exception】CONDITIONS EVALUATION REPORT条件评估报告
java·开发语言·mybatis
山岚的运维笔记4 小时前
SQL Server笔记 -- 第72章:隔离级别与锁定
数据库·笔记·后端·sql·microsoft·sqlserver
硅基动力AI4 小时前
如何判断一个关键词值不值得做?
java·前端·数据库