如何向springmvc传递两个json字符串
发布网友
发布时间:2022-04-23 00:57
我来回答
共1个回答
热心网友
时间:2022-04-23 02:27
在编写页面表单数据较多,并且很多input来自于循环,没有对应的Pojo类与之映射。
在这种情况下,如果循环不是太多的话可以自己构建一个Pojo对象,然后使用SpringMVC的form标签进行绑定。
但是表单过于复杂后这种方式代码就显得非常臃肿。所以采取在前端页面将表单数据拼接成json字符串,然后传递到controller,controller中以字符串进行接收,再通过fastjson类似工具构建为json对象,然后进行解析。
下面开始具体操作
1.test页面代码
先编写页面,我们假设页面有多个name和value属性需要填写,通过foreach循环来生成多个输入框。该页面的文件名为test.jsp
<form id="form1" method="post">
<c:forEach items="${list}" var="aa">
<input name="name${aa}"/>
<br/>
<input name="value${aa}"/>
<br/>
</c:forEach>
<button type="button" id="btn">提交</button>
</form>
2.test页面controller代码
对应的controller代码为:
@RequestMapping(value = "/test")
public String test(Model model) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
model.addAttribute("list", list);
return"test";
}
主要完成生成list,返回到页面。用于页面循环生成input。
3.表单提交
为了完成json转换后提交到后台,通过Ajax提交。
$("#btn").click(function () {
var formData = $("#form1").serializeArray();
var d ={};
$.each(formData, function() {
d[this.name] = this.value;
});
console.log(JSON.stringify(d))
$.ajax({
type: "post",
url:"/testResult",
data:"str="+JSON.stringify(d),
dataType: "json",
ContentType: "application/json;charset=UTF-8",
success: function (data) {
if (data && data.success == "true") {
window.location.href = data.view;
} else {
alert("error");
}
}
});
})
})
4.controller接收json
Controller中以字符串的形式进行接收,然后通过fastjson等工具转换为JSONObject对象,然后再根据值的类型选择相应的get方法进行取值即可。
@ResponseBody
@RequestMapping(value = "testResult",method =RequestMethod.POST)
public Map<String, Object> testResult(String str){
Map<String, Object> map = new HashMap<String, Object>();
//json字符串转换为json对象
JSONObject jsonObject = JSONObject.parseObject(str);
//从json对象中取值,根据值的类型选择get方法
jsonObject.getString("");
map.put("success", "true");
map.put("view", "#");
return map;
}