【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 设置响应内容

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

相关推荐
litGrey7 分钟前
Maven国内镜像(四种)
java·数据库·maven
ac-er888828 分钟前
在Flask中处理后台任务
后端·python·flask
丶白泽32 分钟前
重修设计模式-结构型-桥接模式
java·设计模式·桥接模式
ac-er888835 分钟前
Flask中的钩子函数
后端·python·flask
o独酌o38 分钟前
递归的‘浅’理解
java·开发语言
无问8171 小时前
数据结构-排序(冒泡,选择,插入,希尔,快排,归并,堆排)
java·数据结构·排序算法
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Flying_Fish_roe1 小时前
Spring Boot-版本兼容性问题
java·spring boot·后端
程序猿进阶1 小时前
如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?
java·ide·vscode·算法·面试·职场和发展·架构
slandarer2 小时前
MATLAB | R2024b更新了哪些好玩的东西?
java·数据结构·matlab