过滤器实现统一分页
uselimit | 返回结果 |
---|---|
为空 | 原响应(List) |
true | page{total:t,rows:list} |
-
过滤器实现(分页代码)
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import util.ParamUtil; import net.sf.json.JSONObject; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; @WebFilter(filterName = "limitFilter",urlPatterns = "/**") /** * @author:沧海一粟 * @date: 2019/1/8 17:09 * @description 分页效果 */ public class LimitFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { Boolean useLimit = "true".equals(request.getParameter("useLimit")); Map pager = null; if (useLimit){ int pageSize; int pageNo; Page<Object> page; try { pageSize = Integer.parseInt(request.getParameter("pageSize")); pageNo = Integer.parseInt(request.getParameter("pageNo")); }catch (Exception e){ pageNo=1; pageSize=10; } page = PageHelper.startPage(pageNo,pageSize); ResponseWrapper wrapperResponse = new ResponseWrapper(response); // filterChain.doFilter(request ,wrapperResponse); // //获取返回值 byte[] content = wrapperResponse.getContent(); //判断是否有值 if (content.length > 0) { String str = new String(content, StandardCharsets.UTF_8); JSONArray jsonArray = JSON.parseArray(str); List rows = new ArrayList(); for (Object aJson : jsonArray) { String s = String.valueOf(aJson); Object object = JSON.parse(s); rows.add(object); } pager = ParamUtil.createMap( "rows",rows , "total",page.getTotal() ); //把返回值输出到客户端 ServletOutputStream out = response.getOutputStream(); out.write(JSONObject.fromObject((pager)).toString().getBytes(StandardCharsets.UTF_8)); out.flush(); } }else { filterChain.doFilter(request ,response); } } }
-
所需类
-
ParamUtil :
package util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author:沧海一粟 * @date: 2019/1/3 14:46 * @description map -> entity / util */ public class ParamUtil { public static Map createMap(Object... data) { if (data.length % 2 == 0) { Map<Object, Object> tempData = new HashMap<Object, Object>(); for (int i = 0; i < data.length / 2; i++) { tempData.put(data[i * 2], data[i * 2 + 1]); } return tempData; } else { throw new RuntimeException("Need to be an even number of parameters."); } } public static List<Integer> createList(Object... data) { List list = new ArrayList(); for (Object o : data) { list.add(o); } return list; } public static <KeyClazz> void clearMapExcludes(Map<KeyClazz ,Object> map, KeyClazz... params) { boolean flag = false; for (KeyClazz key : map.keySet()) { excludes:for (KeyClazz param : params) { if (!(key).equals( param)) { flag = true; continue ; } else { flag = false; break excludes; } } if (flag){ map.put(key ,null); } } } public static Map cloneMap(Map originMap) { Map newMap = new HashMap(originMap.keySet().size()); for (Object key : originMap.keySet()) { newMap.put(key ,originMap.get(key)); } return newMap; } public static void setMap(Map map,Object... data) { for (int i = 0; i < data.length / 2; i++) { map.put(data[i * 2], data[i * 2 + 1]); } } }
-
其他所需类请参阅 Web操作界面以及返回数据的翻译
-