JavaWeb/JavaEE      springmvc中RequestMapping使用:修饰位置、属性说明、参数绑定   
文章目录  [隐藏]

内容收集于网络,侵删。

1.修饰位置

1.1.修饰类

请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。 它出现的目的是为了使我们的 URL 可以按照模块化管理:
例如:
账户模块:
/account/add
/account/update
/account/delete
...
订单模块:
/order/add
/order/update
/order/delete
属性:
红色的部分就是把 RequsetMappding 写在类上,使我们的 URL 更加精细。

1.2.修饰方法

请求 URL 的第二级访问目录。
value:用于指定请求的 URL。它和 path 属性的作用是一样的。
method:用于指定请求的方式。
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和 配置的一模一样。
例如:
params = {"accountName"},表示请求参数必须有 accountName
params = {"moeny!100"},表示请求参数中money不能是100。 headers:用于指定限制请求消息头的条件。
注意:
以上四个属性只要出现 2 个或以上时,他们的关系是的关系。

2.示例

2.1.修饰位置示例

控制器代码 :



jsp代码:


2.2.method 属性的示例

控制器代码:



jsp 代码:


2.3.params 属性的示例

控制器的代码:



jsp 中的代码:


3.请求参数的绑定

3.1.绑定机制

表单中请求参数都是基于 key=value 的。
SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。 例如:

中请求参数是:
accountId=10



支持的数据类型:
1)基本类型参数:
包括基本类型和 String 类型
2)POJO 类型参数:
包括实体类,以及关联的实体类
3)数组和集合类型参数 :
包括 List 结构和 Map 结构的集合(包括数组)
SpringMVC 绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求。


如果是基本类型或者 String 类型:
要求我们的参数名称必须和控制器中方法的形参名称保持一致。(严格区分大小写)
如果是 POJO 类型,或者它的关联对象:
要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。
如果是集合类型 ,有两 种方式:
第一种:
要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。 给 List 集合中的元素赋值,使用下标。
给 Map 集合中的元素赋值,使用键值对。
第二种:
接收的请求参数是 json 格式数据。需要借助一个注解实现。
注意: 它还可以实现一些数据类型自动转换。内置转换器全都在:org.springframework.core.convert.support 包下。

3.2.参数绑定示例:基本类型和 String 类型作为参数

jsp 代码:



控制器代码:


3.3.参数绑定示例:POJO 类型作为参数

实体类代码:



Jsp代码:



控制器代码:


3.4.参数绑定示例:POJO类中包含集合类型参数

实体类代码:



jsp 代码:



控制器代码:


3.5.参数绑定示例:请求参数乱码问题

3.5.1.post 请求方式

在 web.xml 中配置一个过滤器



在 springmvc 的配置文件中可以配置,静态资源不过滤:


3.5.2.get 请求方式

tomacat 对 GET 和 POST 请求处理方式是不同的,GET 请求的编码问题,要改 tomcat 的 server.xml 配置文件,如下:

改为:



如果遇到 ajax 请求仍然乱码,请把:
useBodyEncodingForURI="true"改为 URIEncoding="UTF-8" 即可。

3.6.参数绑定示例:自定义类型转换器

Jsp代码



控制器代码:



当我们把控制器中方法参数的类型改为 Date 时:

异常提示:

Failed to bind request element:
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:
Failed to convert value of type 'java.lang.String' to required type
'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException:
Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2018-01-01';
nested exception is java.lang.IllegalArgumentException


3.6.1.第一步:定义一个类,实现 Converter 接口


3.6.2.第二步:在 spring 配置文件中配置类型转换器


3.6.3.第三步:在 annotation-driven 标签中引用配置的类型转换服务


3.7.参数绑定示例:使用 ServletAPI 对象作为方法参数

SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。支持原始 ServletAPI 对象有:
HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale
InputStream
OutputStream
Reader
Writer
我们可以把上述对象 ,直接写在控制的方法参数中使用。


部分示例代码:
jsp 代码:



控制器中的代码:



end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设