我们的分页查询是从首页直接转到/emps
请求,然后控制器收到请求,查出数据,然后转发到list.jsp
页面遍历展示出来,现在这种做法只能适用于客户端是浏览器与服务器之间的交互,但是我们除了浏览器之外还有可能有Android
客户端,iOS
客户端,如果它们向服务器发请求,服务器再将一个页面交给客户端的话,这个解析就比较费劲了,所以比较常用的解决办法是服务器将有效数据以json
的形式返回给客户端
怎么做呢?
index.jsp
页面直接发送ajax
请求进行员工分页数据的查询- 服务器将查出的数据以
Json
字符串的形式返回给浏览器 - 浏览器收到
json
字符串,可以使用js
对json
字符串进行解析,然后使用js
通过dom
增删改改变页面
到控制器(EmployeeController
)中写一个新的方法:
//新的返回员工分页数据的方法
//@ResponseBody:能将返回的对象自动转为json字符串
@ResponseBody
@RequestMapping("/emps")
public PageInfo getEmpsWithJson (@RequestParam(value = "pn",defaultValue = "1") Integer pn){
/**
*引入pagehelper分页插件后,在查询之前只需要调用startPage方法
* 第一个参数是从第几页开始查,也就是页面传过来的pn
* 第二个参数是每页有多少条记录
*/
PageHelper.startPage(pn,5);
//startPage方法后面紧跟的这个查询就是一个分页查询了
List<Employee> emps = employeeService.getAll();
//使用psgeInfo包装查询后的结果,只需要将pageInfo交给页面就可以了
// pageInfo中已经封装好了详细的分页信息了,navigatePages代表要连续显示的页数
PageInfo page = new PageInfo(emps,5);
return page;
}
@ResponseBody
要导入相应jar
包:
<!--引入jackson-databind的jar包-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
上面返回的PageInfo
对象有一些问题,它不具有通用性,比如我们删除,修改,添加,执行完后服务器一般都会返回一个状态码通知客户端成功了或者失败了
所以我们到bean
中,新添加一个通用的返回的类
Msg
package com.atguigu.crud.bean;
import java.util.HashMap;
import java.util.Map;
/**
* 通用的返回的类
* @author nyh
* @create 2018-08-22 11:22
**/
public class Msg {
//状态码 100:成功 200:失败
private int code;
//提示信息
private String msg;
//用户要返回的给浏览器的数据
private Map<String,Object> extend = new HashMap<String,Object>();
public static Msg success(){
Msg msg = new Msg();
msg.setCode(100);
msg.setMsg("处理成功!");
return msg;
}
public static Msg fail(){
Msg msg = new Msg();
msg.setCode(200);
msg.setMsg("处理失败!");
return msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Map<String, Object> getExtend() {
return extend;
}
public void setExtend(Map<String, Object> extend) {
this.extend = extend;
}
//状态码后携带数据的方法
public Msg add(String key, Object value) {
this.getExtend().put(key,value);
return this;
}
}
然后在上面开始的getEmpsWithJson
方法中像这样子返回数据就可以携带状态码了:
return Msg.success().add("pageInfo",page);
结果: