欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于controller使用map接收参数的注意事项

程序员文章站 2022-06-21 23:32:41
目录controller使用map接收参数注意事项controller使用map接收参数并用postman测试controller使用map接收参数注意事项关于前端使用map去接收参数的问题@post...

controller使用map接收参数注意事项

关于前端使用map去接收参数的问题

@postmapping("test01")
@responsebody                        // 如果这里不加@requestbody,那么springmvc默认创建的是bindawaremodelmap
public object test01( map datamap) { // 对象,并且都参数都不会封装进去
    system.out.println(datamap);
    datamap = null;
    return new bindingawaremodelmap(); // 如果返回bindingawaremodelmap对象,就会抛出异常
}

正确封装姿势

@controller
@requestmapping("map")
public class mapcontroller {
    @postmapping("test01")
    @responsebody                                    // 如果加了@requestbody,那么创建的是linkedhashmap
    public object test01(@requestbody map datamap) { // 并且参数都封装了进去(url路径参数和json参数都会封装进去)
        system.out.println(datamap);
        datamap.put("msg", "ojbk");
        return datamap;
    }
}

结论:如果使用map接收前端参数,那么一定要加@requestbody才行

#mybatis使用map封装参数,
@select("select * from t_product where pid = #{pid} or pname = #{pname}")
list<product> getbymap(map map);    
#mybatisplus中有写好的方法
list<t> selectbymap(@param("cm") map<string, object> columnmap);

正确封装姿势2

@data
public class page {
    private map datamap = new hashmap(); // 这里可以不用初始化,加了@requestbody,默认创建linkdedhashmap
}
@controller
@requestmapping("map")
public class mapcontroller {
    @postmapping("test01")
    @responsebody
    public object test01(@requestbody page page) { // 一定要加@requestbody,否则封装不进去
        return page;
    }
}

前端需要使用json传参格式:

{
    "datamap":{
        "name":"zzhua"
    }
}

controller使用map接收参数并用postman测试

controller层

@postmapping("/xksq/getgjclbycondition")
public resultinfo getgjclbycondition(@requestbody map<string,object> params,httpservletrequest request){
    map<string,object> map = new hashmap<>();
    try {
        integer ipageindex = (integer) params.get("ipageindex");
        integer ipagesize = (integer) params.get("ipagesize");
        pagehelper.startpage(ipageindex!=null?ipageindex:1,ipagesize!=null?ipagesize:10);
        string username = jwtutil.getusername(request.getheader("token"));
        rfgcgl user = rfgcglmapper.selectone(new querywrapper<rfgcgl>().eq("yhmc", username));
        if(null==user){
            return resultinfo.fail(903,"用户不存在");
        }
        params.put("qynbbh",user.getqynbbh());
        list<map<string, object>> gjclbycondition = clxxqysqmapper.getgjclbycondition(params);
        pageinfo<map<string, object>> pageinfo = new pageinfo<>(gjclbycondition);
        map.put("total",pageinfo.gettotal());
        map.put("datas",pageinfo);
        return resultinfo.ok(map);
    }catch (exception e){
        e.printstacktrace();
        return resultinfo.fail(901, "列表条件查询失败");
    }
}

使用postman测试

基于controller使用map接收参数的注意事项

controller使用map接收参数时必须使用 @requestbody接收参数,否则后台会出现接收不到的情况

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。