SpringMvc的参数请求类型


一、SpringMVC的请求参数类型?

1.基本数据类型

2.POJO类型

3.数组类型

4.集合类型

二、具体使用

1.基本数据类型

Controller的方法参数的参数名要和请求参数名相同,参数值自动映射
代码如下(示例):
在这里插入图片描述


2.POJO数据类型

(传统方式):getParamterMap得到map集合
要求请求参数中的参数名对应类方法中的setter方法后通过javaBean封装。
代码如下(示例):
在这里插入图片描述


3.数组类型

代码如下(示例):
在这里插入图片描述


4.集合类型

method1:
获得集合时候要将集合参数包装到POJO当中
搭建VO类,封装集合中的数据类型

代码如下(示例):
在这里插入图片描述

method2(当客户端发起Ajax请求):

当客户端发起Ajax请求时,可以ContentType的类型为json类型,那
么在方法参数位置加上@RequestBody可以直接收集集合数据,无需在使用POJO封装。

代码如下(示例):
在这里插入图片描述
在这里插入图片描述
问题(静态资源无法访问):

前端控制器的配置:

 <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

控制器会将jquery作为访问的路径,自然找不到对应的mapping。

解决思路:

1.开放静态资源

<mvc:resources mapping="/js/**" location="/js/" />

2.权限交付
当spring-mvc匹配不到对应的地址后就将权限交给原始的容器去寻找(当前使用的是tomcat)

<mvc:default-servlet-handle />

三、配置全局乱码过滤器

配置filter:

<!--  配置全局过滤filter-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

四、参数绑定注解

前提:当请求参数与Controller业务方法对应的参数名称不相同时,需要通过@RequestParam注解显示绑定

代码如下(示例):

在这里插入图片描述
@RequestParam参数:

1.value:请求参数名称

2.required:指定请求参数是否必要,默认为true,当请求没有该参数时会报错。

3.defaultValue:当没有该参数时,使用默认参数


五、Restful风格参数的获取

1.概念

Restful是一种架构风格,而并不是标准,只是提供了一种设计原则和约束条件,使得设计风格更加简洁有层次感,更易于缓存机制。

2.HTTP协议的操作方式

1.GET:用于获取资源

2.Post:用于新建资源

3.PUT:用于更新资源

4.DELETE:用于删除资源

3.实例

代码如下(示例):
在这里插入图片描述


六、自定义类型转换器

1.定义转换器类实现Converter接口

代码如下(示例):

在这里插入图片描述

2.在配置文件中声明转换器

<!--    声明转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="converter.DataConverter"></bean>
            </list>
        </property>
    </bean>
</beans>

3.引用转换器

<!--    注解驱动:自动加载三大组件 自动配置json转换-->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

七、获取请求头

1.使用@RequestHeader可以获得请求头信息,相当于web阶段的request.getHeader(name)。

2.@CookieValue用于获取Cookie信息


八、文件上传

1.文件上传客户端三要素

① 表单项type=“file”

② 表单提交方式为Post

③ 表单的enctype属性值必须为multipart/form-data

描述
application/x-www-form-urlencoded在发送前编码所有字符(默认)
multipart/form-data不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain空格转换为 “+” 加号,但不对特殊字符编码。

2.原理

① 当表单修改为多部分表单时request.getParameter将失效

② 请求体的正文内容变成了多部分形式

3.单文件上传步骤

① 导入fileupload和io的坐标

   <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

② 配置文件上传解析器

<!--    配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="50000"></property>
    </bean>

③ 编写文件上传编码

 @RequestMapping("/main8")
    public void save8(String name , MultipartFile filename){
        System.out.println(filename);
    }

注:MultipartFile对应的对象名要和文件请求的name相同

4.文件存储

MutipartFile中存在方法transferTo,只需传递File对象即可保存上传的文件。

 @RequestMapping("/main8")
    public void save8(String name , MultipartFile filename) throws IOException {
        System.out.println(filename);
        String originalFilename = filename.getOriginalFilename();
        filename.transferTo(new File("xxxxxxxxxx"));
    }

5.多文件上传

MultipartFile数组作为参数即可。


总结

以上为spring-mvc的请求参数的基本内容,对于集合数据类型需要重点掌握。细节性知识点,例如:开启静态资源访问(mvc:resource),全局乱码过滤器(filter)等也需要重点掌握。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值