SpringMVC绑定json数据

SpringMVC绑定json数据

1、单个参数传参

1、新建一个concatList.jsp,用于验证ajax传递和接收。

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<script type="text/javascript" src="<%=path%>/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript"> 
$(function(){ 
$("#cardNo").blur(function() { 
var cardNo = $("#cardNo").val(); 
var args = {cardNo : cardNo} 
$.ajax({ 
                url :  '<%=path%>/ajax/checkCardNo',
				type : 'post',
				data : args,
				success : function(data) {
					alert(data.cardNo + ':' + data.name);
				},
				error : function() {
					alert("程序出错,请联系管理员");
				}
			});
		});
	});
</script>
</head>
<body>
	<form action="" method="post" id="form1">
		身份证:<input type="text" name="cardNo" id="cardNo" />
		 <label id="cardError"></label><br>
	    姓名: <input type="text" name="name" id="name" /><br> 
	    性别:<input type="text" name="sex" id="sex" /><br>
		年龄:<input type="text" name="age" id="age" /><br> 
		电话:<input type="text" name="tel" id="tel" /><br> 
		<input type="button" id="button" value="添加">
	</form>
</body>
</html>

2、在controller类控制器中添加方法checkCard方法,用于接收前端信息,并验证,返回结果。

package com.isoftstone.controller; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 
import com.isoftstone.entity.Concat; 
@Controller 
@RequestMapping("ajax") 
public class AjaxController { 
@RequestMapping("toConcat") 
public String toConcat() { 
return "concatList"; 
} 
@RequestMapping("checkCardNo") 
@ResponseBody 
public Concat checkCard(String cardNo) { 
System.out.println(cardNo); 
// 此处做业务处理,并返回Concat对象 
// 测试时,假设可以查询出结果,手动创建一条记录。 
Concat concat = new Concat(); 
concat.setCardNo(cardNo); 
concat.setName("张三"); 
concat.setAge(20); 
concat.setSex(true); 
concat.setTel("1323345632"); 
return concat; 
} 
}

3、添加Concat的Model类。

package com.isoftstone.entity;

public class Concat {
	private String cardNo;
	private String name;
	private boolean sex;
	private Integer age;
	private String tel;

	public String getCardNo() {
		return cardNo;
	}

	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean isSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}
}

4、输入网址:http://localhost:8080/项目名/ajax/toConcat
在这里插入图片描述
返回单个参数的情况:需要修改方法的返回类型和接收的单个参数。
方法修改如下:

@RequestMapping("checkCardNo") 
	@ResponseBody 
	public boolean checkCard(String cardNo) 
	{ // 业务逻辑,返回true或者false,代表能不能查到数据
		// 能查到,说明存在,否则不存在
		Boolean flag =(cardNo!=null); 
		return flag; 
		 
	}

页面ajax返回data信息修改如下:

$.ajax({ 
                url :  '<%=path%>/ajax/checkCardNo',
				type : 'post',
				data : args,
				success : function(data) {
					$("#cardError").text("乘车人已存在");
				},
				error : function() {
					alert("程序出错,请联系管理员");
				}
			});
		});

返回list多条数据的情况:需要修改方法的返回类型和接收的list信息。
方法修改如下:

@RequestMapping("checkCardNo") 
@ResponseBody 
public List<Concat> checkCard(String cardNo) 
{ 
	List<Concat> list = new ArrayList<>(); 
	// 业务逻辑获取多条concat 
	// ... 
	return list; 
}
$("#cardNo").blur(function() { 
var cardNo = $("#cardNo").val(); 
var args = {cardNo : cardNo} 
$.ajax({ 
	url : '<%=path%>/ajax/checkCard',
	type : 'post', 
	data : args, 
	success : function(data){ 
		//可以接收list 
		$.each(data,function(index,result){ 
			alert(result.cardNo + ':' + result.name); 
			}); 
		},
		error : function(){ 
			alert("程序出错,请联系管理员"); 
		}	
});
});

2、Ajax提交表单信息的参数传递

表单传递信息可分为两种情况:
1、ajax中serialize() 方法可以将表单以字符串的形式传入controller,controller层接收传参对象。
concatList.jsp做表单提交时:

$("#button").click(function(){
	//ajax表单提交,返回表单数据数据
	$.ajax({
		url : '<%=path%>/ajax/saveConcat', 
		cache : false, 
		data : $('#form1').serialize(), 
		type : 'post',
		success:function(result){
			alert(result.cardNo + ',' + result.name);
		}
	});	
});

2、实现表单提交,返回boolean类型。做判断,alert是否成功
将对象转成json格式传入controller,要求ajax传参时必须满足以下要求:
a、ajax传参中需加入:contentType : ‘application/json; charset=utf-8’;
b、data如果为对象args={name:name,age:age},要求名字要和参数的对象一致,转成 JSON 格式:data: JSON .stringify(args);
c、controller参数需加入@RequestBody 类名 对象名,
如:@ResquestBody Concat concat。
具体代码如下:
concatList.jsp做表单提交时:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


$(function(){ 
$('#button').click(function(){ 
var name = $('#name').val(); 
var age = $('#age').val(); 
var args = {name:name, age:age} 
$.ajax({ 
url:'<%=path%>/ajax/saveConcat', 
cache : false, 
contentType : 'application/json; charset=utf-8', 
data : JSON.stringify(args), 
type : 'post', 
success : function(result) { 
alert(result); 
} 
}); 
}); 
});

Controller接收表单的方法:

@RequestMapping("saveConcat") 
@ResponseBody 
public Boolean saveConcat(@RequestBody Concat concat) { 
Boolean flag =(concat!=null); 
return flag; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值