深度使用@RequestBody,传入实体?传入数组?传入集合?这都过于低端,我所说的是如何获取前端传来多个不同的对象实体,并且是不同的对象类型

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;
    }

其实前端代码还是一样,并没有发生变化,这样就完成了这种尴尬的事情,其实应该还有以字符串的形式进行传参,不过那样就呵呵了,自己想想那得多么得麻烦,对象不同,类型有不同,那传过来的东西得有多么得复杂,------------------这篇博客希望对你们有点帮助

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值