学习目标:

熟悉SpringMvc前后台数据传输及接收的方法,以此深沉次的了解Spring的直接 @requestParam 及 @requestBody的使用场景。

学习内容:

场景一:使用通过key-value方式提交到后台**

  1. 后台默认是通过 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时,整理的个人理解信息,可供大家参考,后续有新的感悟,持续更新~~~