zoukankan      html  css  js  c++  java
  • [踩坑] 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
    
  • 相关阅读:
    Leetcode--Median of Two Sorted Arrays
    My rule
    00113_通过反射获取成员方法并使用
    雷林鹏分享:MySQL 管理
    雷林鹏分享:MySQL 安装
    雷林鹏分享:MySQL 教程
    雷林鹏分享:jQuery Mobile 列表视图
    雷林鹏分享:jQuery Mobile 网格
    雷林鹏分享:MySQL 导出数据
    雷林鹏分享:MySQL 导入数据
  • 原文地址:https://www.cnblogs.com/WcxyBlog/p/13870984.html
Copyright © 2011-2022 走看看