Bootstrap-table 查询时通过Post请求传入复杂类型参数到后台控制器

Bootstrap-table默认的传参

Bootstrap-table每次刷新或者排序都会自动向设置好的url发送一个请求,请求中包含4个默认的参数

  1. 当data-query-params-type属性设置成limit时(默认情况)
    四个参数为:limitoffsetsortorder
  2. 当data-query-params-type为空时
    四个参数为:pageSizepageNumbersortNamesortOrder

参考:https://bootstrap-table.com/docs/api/table-options/#queryparams

增加自定义参数

然而仅凭这几个参数只能实现排序,无法实现条件查询,要想table发送请求时增加自定义参数,这时候就需要设置data-query-params属性。

当设置table的data-query-params后

data-query-params="queryParams"

就可以通过一个js函数来在Bootstrap-table发送请求前增加参数

function queryParams(params) {
    params.name = "张三";
    params.age=32;
    return params;
}

这时候控制器就可以接收到除4个基本参数外的两个额外自定义参数

@ResponseBody
@RequestMapping(value ="/test")
public String test(String sortName, String sortOrder, Integer pageNumber, Integer pageSize,String name,Integer age){
        return "";
}

并且这时候,如果有一个实体类Student,包含name和age属性,那可以直接在控制器用Student对象来接收,变成

@ResponseBody
@RequestMapping(value ="/test")
public String test(String sortName, String sortOrder, Integer pageNumber, Integer pageSize,Student stu){
        return "";
}

然而,如果Student类中有一个属性是一个复杂类型,比如ClassInfo(属性:id和name)

public ClassInfo{
    private Integer id;
    private String name;

    //getter和setter省略
}
public Student{
    private String name;
    private Integer age;
    private ClassInfo classinfo;

    //getter和setter省略
}

这时要再想让Bootstrap-table能把一个带班级信息的学生对象传给控制器的stu参数,就不是那么容易了

正题:POST请求传入复杂类型数据

因为默认的get请求会有限长的弊端,所以在研究的时候连同使用post请求一起涉及的

1.设置表格属性

data-query-params-type=""

//这个post应该没用,因为最终的请求在ajaxRequest决定
data-method="post"

//post请求的数据加此设定才能被控制器接收
data-content-type="application/x-www-form-urlencoded"

//重写table发送的ajax请求
data-ajax="ajaxRequest"

2.封装控制器接收的参数到一个工具类

因为控制器接收4个基本参数外加一个复杂类型参数,比较繁琐,所以用泛型封装一下

/**
 * @program: MyClassProject2
 * @description: 接受bootstraptable查询时传入的复杂参数
 * @author: Bluce Young
 * @create: 2019-08-06 09:13
 **/
public class TableParams {
    private String sortName;
    private String sortOrder ;
    private int pageSize;
    private int pageNumber;
    //查询条件类
    private E data;

    //getter和setter省略
}

3.修改控制器接收

添加@RequestBody注解

@ResponseBody
@RequestMapping(value = "stulistdata")
public PageData stulist(@RequestBody TableParams tableParams){
       
       
}

4.重写table发送的ajax请求

function ajaxRequest(params){
    var student={
        "name":"张三",
        "age":"33",
        "classinfo":{
            "id":"3",
            "name":"五年一班"
        }
    };    
    params.data.data=student;//第二个data是tools.TableParams类的泛型属性
     $.ajax({
            url:params.url,
            data:JSON.stringify(params.data),
            type:"POST",
            contentType:"application/json",
            dataType:"json",
            success:function(data){
                params.success(data);
            }
    });
}

 

你可能感兴趣的:(Java,bootstrap-table,复杂类型,查询,传参)