[踩坑] SpringMVC拦截器处理ajax请求并返回Msg数据 AND PageHelper使用:使用setList修改返回数据

SpringMVC拦截器处理ajax请求并返回Msg数据

由于要配置网站的访问权限,所以在项目中使用SpringMVC的拦截器配置了对需要权限的请求的拦截。

但是在我的项目的前端中,用写接口是通过Ajax访问服务器获取数据的,因此当没有权限时,拦截器将其请求进行拦截后,不会返回给前端的ajax任何数据(拦截器中的redirect也不会生效);因此,我需要配置这个过滤器处理Ajax的请求。

解决方法

//1. 通过request获取请求头,判断请求是否为Ajax(请求为Ajax请求还是普通请求)
String header = request.getHeader("X-Requested-With");

//2. 如果为Ajax请求的话,设置响应类型,写回数据
if("XMLHttpRequest".equals(header)) {
    response.setContentType("application/json;charset=UTF-8");
    Writer writer = response.getWriter();
    writer.write("这是一个返回信息");
    response.flushBuffer();
}

PageHelper使用:使用setList修改返回数据

今天在使用PageHelper进行分页的过程中,遇到了一个大坑。最开始还可以正常分页,后来睡了一觉,呸...。不知道怎么回事,就不能用了。具体出现的问题是,分页只有一页。。。

后来查了网友的很多博客的文章,虽然对插件的使用又了解了多了一点:

  1. PageHelper.startPage(0,2);这个语句一定要只会对在其之后的第一个语句进行分页,因此一定要紧紧跟着你要对其进行分页的第一个语句。
  2. PageInfo不一定要写泛型(我真傻,真的)

在翻了很久的博客,我快要绝望的时候,我意识到是否是因为我修改了分页后的数据,然后才设置到PageInfo中的原因。经过测试后,果然是这样的。所以,这个坑的解决办法就是:如果想要修改分页后的数据(修改属性或者直接换成另一个对象ps(VO)),一定要将分页后的数据设置到PageInfo中之后PageInfo pageInfo = new PageInfo(list)。在使用setList()进行修改。

List<Book> books = bookService.getAllBooks();
PageInfo pageInfo = new PageInfo(books);

//对books进行处理,转换成另一个对象list,List<BookVO>;

pageInfo.setList(bookVO);

model.addAttribute("pageInfo",pageInfo);
//ok
原文地址:https://www.cnblogs.com/WcxyBlog/p/13870984.html