多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
以查询用户列表的接口为例,不包装的情况下默认的查询结果为这些字段  ![image_1c4tmpf94to7oesm17lo14rk9.png-10.7kB](https://img-blog.csdnimg.cn/201812281746400)  其中性别,角色,部门,状态都是数值或者id类型,我们需要把他们包装成文字形式返回给前端 1. 首先建立`UserWarpper`类继承`BaseControllerWarpper`类 ``` /** * 用户管理的包装类 * * @author fengshuonan * @date 2017年2月13日 下午10:47:03 */ public class UserWarpper extends BaseControllerWarpper { public UserWarpper(List<Map<String, Object>> list) { super(list); } @Override public void warpTheMap(Map<String, Object> map) { map.put("sexName", ConstantFactory.me().getSexName((Integer) map.get("sex"))); map.put("roleName", ConstantFactory.me().getRoleName((String) map.get("roleid"))); map.put("deptName", ConstantFactory.me().getDeptName((Integer) map.get("deptid"))); map.put("statusName", ConstantFactory.me().getStatusName((Integer) map.get("status"))); } } ``` 通过查看`BaseControllerWarpper`类可了解到被包装的参数必须为Map或者List类型 ``` /** * 控制器查询结果的包装类基类 * * @author fengshuonan * @date 2017年2月13日 下午10:49:36 */ public abstract class BaseControllerWarpper { public Object obj = null; public BaseControllerWarpper(Object obj) { this.obj = obj; } @SuppressWarnings("unchecked") public Object warp() { if (this.obj instanceof List) { List<Map<String, Object>> list = (List<Map<String, Object>>) this.obj; for (Map<String, Object> map : list) { warpTheMap(map); } return list; } else if (this.obj instanceof Map) { Map<String, Object> map = (Map<String, Object>) this.obj; warpTheMap(map); return map; } else { return this.obj; } } protected abstract void warpTheMap(Map<String, Object> map); } ``` 我们继承`BaseControllerWarpper`类主要是为了实现`warpTheMap()`方法,也就是具体的包装过程,`warpTheMap()`方法的参数map就是被包装的原始数据的每个条目,我们可以在这每个条目中增加一些字段也就是被包装字段的中文名称,如下  ![image_1c4tn697k14vjstnce46ge4tlm.png-20.6kB](https://img-blog.csdnimg.cn/2018122817464044)