Ⅰ:前言
前面一篇文章主要学习了利用SpringMVC传递与返回数据、现在大多不采用jsp而使用前后台分离的方式,重点掌握利用SpringMVC与前台基于json数据的交互。上文例子中前台发送给后台的是json数据、后台返回给前台的是json数据。灵活性较差,每一次都需要将表单元素序列化并封装为json对象在转为json字符串给服务器端。我觉得前台发送给服务器端的数据类型应该灵活些,前后台分离重点应该是服务器端向后台返回json数据。
Ⅱ:content-Type
MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
常见媒体格式如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式
以application开头的媒体格式
- application/xhtml+xml :XHTML格式
- application/xml : XML数据格式
- application/atom+xml :Atom XML聚合格式
- application/json : JSON数据格式
- application/pdf :pdf格式
- application/msword : Word文档格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded : form中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
form表单用action进行post/get提交的content-Type格式都为application/x-www-form-urlencoded,ajax提交至服务器的默认编码也为application/x-www-form-urlencoded。那我们可以不使用@RequestBody注解来进行开发提升灵活性。默认情况下,@RequestBody注解会将请求体中的内容解析为字符串。
Ⅲ:使用AJAX默认的Content-Type进行交互
该种方式可以大大提高前台发送数据、后台获取数据的灵活性 <form id="testForm">
用户名:<input type="text" name="username"/><br/>
性别:<input type="text" name="sex"/><br/>
年龄:<input type="text" name="age"/><br/>
<input type="button" value="提交" id="submit">
</form>
$("#submit").click(function () {
var jsonObject = $("#testForm").serializeObject();
//console.log(JSON.stringify(jsonObject));
$.ajax({
type: "post",
url: "test/demo5",
data: jsonObject,
dataType: 'json',
success: function(data) {
//如果返回的是json字符串、需要在前台解析为json对象
var object = $.parseJSON(data);
alert(object.statusCode);
}
});
});
@RequestMapping("/demo5")
public @ResponseBody String getUserInfo(HttpServletRequest request,User user,String username,String age) {
System.out.println(request.getMethod());
System.out.println(request.getContentType());
System.out.println(user.toString());
System.out.println(username);
System.out.println(age);
//业务逻辑处理
JSONObject jsonObject = new JSONObject();
jsonObject.put("statusCode","200");
return jsonObject.toString();
}
后台已接收到参数并映射进去
前台也已接收到返回的json字符串
前台发送数据可以为$("#testForm").serialize或者$("#testForm").serializeArray或者表单数据的json对象都可以。
后台接收数据可以一一对应、可以用JavaBean、可以@RequestParam
相关链接: