springmvc03:SpringMVC获得请求数据

3获得请求参数

 3.1基本数据类型

1.controller

@RequestMapping(value = "/quick10")
@ResponseBody
public void save10(String username,int age) throws Exception{
    System.out.println(username);
    System.out.println(age);
}

 2.发送请求,获取参数成功

 3.2.Pojo参数类型,封装类

@RequestMapping(value = "/quick11")
@ResponseBody
public void save11(User user) throws Exception{
    System.out.println(user);
}

3.3数组类型参数 

Controller中的数组名称与请求参数的name一致,参数会自动映射匹配

 3.4.集合类型参数

1集合类型参数1

封装集合

@RequestMapping(value = "/quick13")
@ResponseBody
public void save13(Vo vo) throws Exception{
    System.out.println(vo);
}

 2.集合类型参数2

1.引入jquery-3.3.1.js

2.发送ajax请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
<script>
    var userlist=new Array();
    userlist.push({name:"zhangsan",age:19});
    userlist.push({name:"zhangsan",age:29});
$.ajax({
    type:"POST",
    url:"${pageContext.request.contextPath}/quick13",
    data:JSON.stringify(userlist),
    contentType:"application/json;charset=utf-8"
});

</script>
</head>
<body>
</body>
</html>

3.配置spring-mvc.xml 开启静态资源访问

    <!--开启静态资源的访问-->
    <!--<mvc:resources mapping="/js/**" location="/js/"/>-->
    <!--<mvc:resources mapping="/img/**" location="/img/"/>-->
<!--交给原始容器 tocat内部机制找静态资源-->
    <mvc:default-servlet-handler/>

4.服务端参数接收

@RequestMapping(value = "/quick13")
@ResponseBody
public void save13(@RequestBody List<User> userList) {
    System.out.println(userList);
}

3.5.配置中文乱码过滤器 web.xml

<!--配置全局过滤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>

3.6参数绑定注解@RequestBody

value:与请求参数名称

required:此在指定的请求参数是否必须包括,默认true,提交时没有此参数提示报错

defaultValue:当没有指定请求参数时,则使用指定的默认值赋值

@RequestMapping(value = "/quick15")
@ResponseBody
public void save15(@RequestParam(value = "username",required = true,defaultValue = "张三") String name) throws Exception{
    System.out.println(name);

}

测试成功

 3.7获得Restful风格的参数

 

 测试代码controller

@RequestMapping(value = "/quick16/{name}",method = RequestMethod.GET)
@ResponseBody
public void save16(@PathVariable(value = "name") String name){
    System.out.println(name);
}

运行结果

3.8自定义类型转换器

SpringMVC虽然默认提供了一些常用的类型转换器,但不是所有的数据类型都提供了转换器,没有提供就自定义转换器,例如日期类型。

自定义类型转换器的开发步骤

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

package com.hzw;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class converter implements Converter<String,Date> {
    public Date convert(String source) {
        //将日期字符串转换成日期对象 返回
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date=null;
        try {
             date = format.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    return date;
    }

}

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

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

3)在<annotation-diven>中引用转换器

<!--mvc注解驱动-->
<mvc:annotation-driven conversion-service="conversionService"/>

测试类

@RequestMapping(value = "/quick17",method = RequestMethod.GET)
@ResponseBody
public void save17(Date date){
    System.out.println(date);
}

 测试结果 日期类型yyyy-MM-dd转换成功

3.9获取Servlet相关API

SpringMVC支持使用原始SercletAPI对象作为控制器方法的参数进行注入,常用的对象如下:

HttpServletRequest

HttpServletResponse

HttpSession

直接获取

@RequestMapping(value = "/quick18",method = RequestMethod.GET)
@ResponseBody
public void save18(HttpServletRequest request, HttpServletResponse response, HttpSession httpSession){
    System.out.println(request);
    System.out.println(response);
    System.out.println(httpSession);
    }

3.10获取请求头

1.@RequestHeader

使用@Request可以获取请求头信息,相当于web阶段学习的request.getHeader(name)

@RequestHeader注解的属性如下

value:请求头名称

required:是否必须携带此请求头

@RequestMapping(value = "/quick19",method = RequestMethod.GET)
@ResponseBody
public void save19(@RequestHeader(value = "User-Agent",required = false) String hzw){
    System.out.println(hzw);
}

3.11@CookieValue

使用@CookieValue可以获取指定的Cookie的值

@CookieValue注解的属性如下

value:指定的cookie的名称

required:是否必须携带此cookie

@RequestMapping(value = "/quick20",method = RequestMethod.GET)
@ResponseBody
public void save20(@CookieValue(value = "JSESSIONID",required = false) String jsessionid){
    System.out.println(jsessionid);
}

3.12文件上传

文件上传原理

当form表单修改为多部分表单时,request.getParameter()将失效。

enctype="application/x-www.form-urllencoder"时,form表单的正文内容格式是:

key=value&key=value&key=value

当form表单的enctype取值为Multipart/form-data时,请求内容会变成多部分形式

单文件上传步骤

(1).导入flieupload和io坐标

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.2</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

(2).配置文件上传解析器

<!-- -配置文件解析器,处理文件,将客户端上传的File文件,处理为MultipartFile-->
    <bean id ="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置文件解析的编码,注意:一定要和页面的pageEncoding保持一致 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 设置最大上传文件大小 -->
        <property name="maxUploadSize" value="999999"></property>
    </bean>

(3).编写文件上传代码

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/quick21" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="uploadFile">
    描述:<input type="text" name="username">
    <input type="submit" value="上传">
</form>
</body>
</html>

controller

    @ResponseBody
@RequestMapping(value = "/quick21",method = RequestMethod.POST)
    public void save21(String username, MultipartFile uploadFile) throws IOException {
        System.out.println(username);
        String filename = uploadFile.getOriginalFilename();
        System.out.println(filename);
//        uploadFile.transferTo(new File("D:\\upload\\"+filename));

    }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值