博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc怎么解析post_springmvc的数据接收
阅读量:6973 次
发布时间:2019-06-27

本文共 4999 字,大约阅读时间需要 16 分钟。

前言

先说结论,springmvc可以接收的参数类型如下:

基本数据类型

POJO类型参数

数组类型参数

集合类型参数

此外,本篇文章也会对获取restful参数、获取请求头信息、文件上传等内容进行总结

一、获取基本数据类型(get请求)

http://localhost:8088/user/getParams?username=xiaoming&age=15

@RequestMapping("/getParams")

@ResponseBody

public void getParams(String username,int age){

System.out.println("username: "+ username);

System.out.println("age: "+ age);

}

1917bb3a6ca1

image.png

二、获取pojo类型参数,会实现pojo参数的自动封装

http://localhost:8088/user/getParams2?username=xiaoming&age=15

@RequestMapping("/getParams2")

@ResponseBody

public void getParams2(User user){

System.out.println(user);

}

1917bb3a6ca1

image.png

三、获取数组类型参数(get请求)

和上面的做法没什么差别,url只要参数和方法的参数名保持一致就行

http://localhost:8088/user/getParams3?str=xiaoming&str=xiaohong&str=xiaoqi

@RequestMapping("/getParams3")

@ResponseBody

public void getParam3(String[] str){

System.out.println(Arrays.asList(str));

}

1917bb3a6ca1

image.png

四、获取集合类型参数(post请求)

场景一: 直接的表单提交

获取集合类型的参数相对来说有些特殊,需要通过包装类封装一下才可以接受到集合参数

localhost:8088/form.jsp 跳转到页面后,填写信息提交

Title

用户名1

用户年龄1

用户名2

用户年龄2

/**

* 要使用集合的话,要用建一个包装类封装一下

*/

@RequestMapping("/getParams4")

@ResponseBody

public void getParam4(UserVO userVO){

System.out.println();

}

1917bb3a6ca1

image.png

场景2: 提交过来的数据格式是json格式

这里有两点要注意

需要用@RequestBody注解,这样才可以直接接收集合数据而无需使用POJO进行包装。

这里的话使用到了jq,记得要引入对应的包

http://localhost:8088/ajax.jsp

Title

var userList = new Array();

userList.push({username:"zhangsan",age:18});

userList.push({username:"lisi",age:28});

$.ajax({

type:"POST",

url:"${pageContext.request.contextPath}/user/getParams5",

data:JSON.stringify(userList),

contentType:"application/json;charset=utf-8"

});

@RequestMapping("/getParams5")

@ResponseBody

public void getParam5(@RequestBody List userList){

System.out.println(userList);

}

1917bb3a6ca1

image.png

注意:由于DispatcherServlet会对所有的请求进行过滤,如果想要页面获取到静态资源,需要对请求进行放行。

方法1:在spring-mvc.xml中加入

方法2:在spring-mvc.xml中加入

五、参数绑定注解

这种是对于页面上的入参名和方法的参数名称不对应时,可以使用@requestParam注解来进行参数绑定

http://localhost:8088/user/getParam6?name=xiaoming

通过@RequestParam注解实现了url和方法参数的映射

@RequestMapping("/getParam6")

@ResponseBody

public void getParam6(@RequestParam("name") String username){

System.out.println(username);

}

1917bb3a6ca1

image.png

六、获取restful风格参数

http://localhost:8088/user/getRestfulParam/xiaoming

使用@PathVariable注解和 { }占位符对url参数进行接收

/**

* 获取restful风格参数

*/

@RequestMapping("/getRestfulParam/{name}")

@ResponseBody

public void getRestfulParam(@PathVariable(value = "name",required = true) String username){

System.out.println(username);

}

1917bb3a6ca1

image.png

七、获取日期类型的参数

SpringMVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。

但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。

步骤如下:

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

package com.xiaoming.util;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class DateConverter implements Converter {

public Date convert(String dateStr) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

try {

Date date = sdf.parse(dateStr);

return date;

} catch (ParseException e) {

e.printStackTrace();

}

return null;

}

}

2. 在spring-mvc.xml文件中声明转换器

class="org.springframework.context.support.ConversionServiceFactoryBean">

3. 在中引用转换器

发起请求

http://localhost:8088/user/getDateParam?date=2020-10-3

1917bb3a6ca1

image.png

八、获取Servlet原生API

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

HttpServletRequest

HttpServletResponse

HttpSeesion

@RequestMapping("/getHttpParam")

@ResponseBody

public void getHttpParam(HttpServletRequest servletRequest, HttpServletResponse servletResponse, HttpSession session){

System.out.println(servletRequest);

System.out.println(servletResponse);

System.out.println(session);

}

九、获取文件资源

1. 导入fileupload和io坐标

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.3

2. 配置文件上传解析器

3. 使用MultipartFile类进行接收

@RequestMapping("/getUploadFile")

@ResponseBody

public void getUploadFile(String name, MultipartFile uploadFile1,MultipartFile uploadFile2){

System.out.println("hhh");

if(null !=uploadFile1 && !StringUtils.isEmpty(uploadFile1.getOriginalFilename())&&

null !=uploadFile2 && !StringUtils.isEmpty(uploadFile2.getOriginalFilename())){

String filename1 = uploadFile1.getOriginalFilename();

String filename2 = uploadFile2.getOriginalFilename();

try {

uploadFile1.transferTo(new File("C:\\upload\\"+filename1));

uploadFile2.transferTo(new File("C:\\upload\\"+filename2));

} catch (IOException e) {

e.printStackTrace();

}

}

}

如果是多个文件的话,也可以通过MultipartFile[] 数组来对进行用户上传的文件进行接收

@RequestMapping("/getUploadFiles")

@ResponseBody

public void getUploadFiles(String name, MultipartFile[] uploadFiles){

for(MultipartFile uploadFile :uploadFiles){

if(null !=uploadFile && StringUtils.isEmpty(uploadFile.getOriginalFilename())){

String filename = uploadFile.getOriginalFilename();

try {

uploadFile.transferTo(new File("C:\\upload\\"+filename));

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

总结

总的来说,springmvc提供给了我们接收各种数据类型参数的方法,一方面,针对字符串、pojo类型数据等常见的类型,我们可以直接通过参数名称或者@RequestParam注解来进行映射,对于特殊一些的日期转换,我们可以通过自定义转换器来实现;对于文件上传,则可以通过MultipartFile类型参数来接收。也能通过springmvc获取到一些servlet的原生api。

在实际开发项目中,也需要我们结合项目的具体框架设计来合理的对前端的参数进行正确的接收。

转载地址:http://lxhsl.baihongyu.com/

你可能感兴趣的文章
程序员2009精华本(china-pub首发)--百期后的新起点
查看>>
毕业生的商业软件开发之路--C#数据类型
查看>>
云计算解码:技术架构和产业运营
查看>>
win32消息参数以及如何获取窗口实例句柄hInstance
查看>>
一个从java后台setter传过来param属性的值,一个jsp有一个iframe标签并且此标签也嵌套了jsp,嵌套的jsp无法获取param属性值...
查看>>
windows7学习一
查看>>
动态规划思想--最长公共子串
查看>>
单选按钮易忽略的Group属性
查看>>
转 sql 优化
查看>>
posix多线程--三种基本线程编程模型
查看>>
当开始输入文字以及完成文字输入时,变换text field的背景以及系统自带一键删除的 叉叉...
查看>>
PHP安全相关的配置(1)
查看>>
期权、RSU的区别与行权事宜
查看>>
中国六个漂亮的古镇风景名胜区网站欣赏
查看>>
Razor语法(三)
查看>>
PHP之文件: 遍历目录
查看>>
区域极值
查看>>
2012 年值得关注的十个云计算服务
查看>>
virtualbox 中,虚拟机网络使用NAT方式时,其它机器对虚拟机的访问
查看>>
SQL Server2012 T-SQL对分页的增强尝试
查看>>