https://www.cnblogs.com/mahuan2/p/6008832.html
有的人可能认为这样直接传入使用多个@RequestBody不就可以吗?哦!这样的话,博主给你看看是这样的形式不
看代码-------------------controller API接口
@RequestMapping("/searchImprove")
@ResponseBody
public Page<TestBaseTollgate> searchImprove(
@RequestBody BaseTollgatePublicVo[] publicVos, @RequestBody BaseTollgateMinorVo minorVo) throws Exception {
List<BaseTollgatePublicVo> lists = new ArrayList<BaseTollgatePublicVo>();
System.out.println("数据---------------------" + publicVos.length);
if (EmptyUtils.isEmpty(publicVos)) {
······························································
return pages;
}
前端jsp--Ajax代码块!
//数据传输
function onSearch(publicVos,minorVo) {
mini.parse();
// mini.alert("字符串" + JSON.stringify(json));
// var o = JSON.parse(publicVos);
$.ajax({
type : 'POST',
data : JSON.stringify({publicVos,minorVo}),
contentType : 'application/json',
dataType : 'json',
url : "-------------------------------------------",
success : function(text) {
var data = mini.decode(text);
var grid = mini.get("tollgateId");
grid.setData(data.rows);
grid.gotoPage(data.curPage,data.pageSize);
alert("解析数据---------" + JSON.stringify(text));
},
error : function(e) {
alert("error");
}
});
}
额,如果你想的是这样的话,那么恭喜你,这样是错的,因为这样你在前端传参时,就会发现,出现400错误,意思是服务器无法理解这个请求,那这是为什么呢?后面才发现原因是request的content-body是以流的形式进行读取的,读取完一次后,就不会在次读取了,所以说就是不能同时使用两次@RequestBody进行json数据解析,那如果又必须这样使用,又得怎么办呢,其实思维灵活的伙伴一下就能想到,为何不只使用一个@RequestBody呢,那怎样又能让两个不同的对象都能够完成数据接受呢,这样就想到了封装,如果把这两个实体对象我封装成一个实体,也就是这个实体类中放两个实体类型参数,好了废话说了一大堆,直接看代码吧---------------------先把这两个实体类型进行封装到Params类中,如下
package com.xqsm.entity.model;
import com.xqsm.entity.vo.BaseTollgateMinorVo;
import com.xqsm.entity.vo.BaseTollgatePublicVo;
public class Params {
private BaseTollgatePublicVo[] publicVos;
private BaseTollgateMinorVo minorVo;
public BaseTollgatePublicVo[] getPublicVos() {
return publicVos;
}
public void setPublicVos(BaseTollgatePublicVo[] publicVos) {
this.publicVos = publicVos;
}
public BaseTollgateMinorVo getMinorVo() {
return minorVo;
}
public void setMinorVo(BaseTollgateMinorVo minorVo) {
this.minorVo = minorVo;
}
}
然后是controller API接口
@RequestMapping("/searchImproves")
@ResponseBody
public Page<TestBaseTollgate> searchImproves(
@RequestBody Param param) throws Exception {
-------------------------------------------中间代码省略
return pages;
}
其实前端代码还是一样,并没有发生变化,这样就完成了这种尴尬的事情,其实应该还有以字符串的形式进行传参,不过那样就呵呵了,自己想想那得多么得麻烦,对象不同,类型有不同,那传过来的东西得有多么得复杂,------------------这篇博客希望对你们有点帮助