学习目标:
熟悉SpringMvc前后台数据传输及接收的方法,以此深沉次的了解Spring的直接 @requestParam 及 @requestBody的使用场景。
学习内容:
场景一:使用通过key-value方式提交到后台**
- 后台默认是通过 request.getParameterValues
进行数据解析封装,故请求时请后台参数名称一样时,默认未自动封装接收;
在使用 SpringMVC 实现请求参数封装时,它支持基本类型,POJO 类型和集合类型。其封装原理其实就是使用我们原始的 ServletAPI 中的方法,并且配合反射实现的封装。
此处我们以最简单的 String 和 Integer 两个方法为例,带着大家把整个执行过程走一圈。
先来看控制器的方法:
a、如果前端传入的key与后台接受的参数名称一样时,可不用任何修饰;
b、如果前后台传入的名称不一致时,后台需要使用@requestParam注解进行映射处理
@Controller
public class HelloControler {
@RequestMapping("hello")
public String sayHello(String name,Integer age) {
System.out.println("控制器方法执行了"+name+","+age);
return "success";
}
@RequestMapping("hello1")
public String sayHello1(@RequestParam("name") String userName,Integer age) {
System.out.println("控制器方法执行了"+name+","+age);
return "success";
}
}
再看前端的请求方式:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.print(basePath);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<script type="text/javascript" src="<%=request.getContextPath()%>/javascript/ajax.js"></script>
<title>My JSP 'test.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript">
</script>
</head>
<body>
<form method="post" action="/login.do">
<input type="text" name="name" value="">
<input type="text" name="age" value="" >
<input type="button" value="提交">
</form>
</body>
</html>
场景二:使用通过json格式方式提交到后台
当我们在请求时,将数据封装成一个json格式时,此时提交的数据格式为’{key:value}',后台无法在默认的通过 getParameterValues 获取到资源,这时我们需通过获取body中的数据,此时需要借用注解 @requestBody来进行接收整体的json字符串,然后手工转成json对象。
a、简单情况下,我们可以直接获取body中的数据,然后直接手工成一个json对象;
b、如果不想手工转,要想实现封装,需要借助 jackson 开源框架进行封装为一个pojo对象处理。
先来看控制器的方法:
public class ParamController {
/**
1. 处理请求的控制器方法
2. @return
*/
@RequestMapping("hello2")
public String sayHello2(@RequestBody String body) {
System.out.println("控制器方法执行了 2"+body);
return "success";
}
}
再看看前端的代码
<script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#ajaxBtn").click(function(){
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/hello2",
dataType:"text",
data:"{'name':'test','age':18}",
contentType:"application/json",
success:function(data){
alert(data);
}
});
});
})
</script>
<title>SpringMVC</title>
</head>
<body>
<button id="ajaxBtn">异步请求</button>
</body>
</html>
以上是在学习SpringMvc时,整理的个人理解信息,可供大家参考,后续有新的感悟,持续更新~~~