方法描述:我们查询数据库或者其他操作获取的字段可能会比前端需要的字段要多,返回字段太多导致前端不愿意,该方法用于格式化字段,只返回前端需要的。
方法如下:
/**
* 格式化接口的返回数据
* @author dxg
*
*/
public class FormatObject {
/**
* 格式化bean数据
* @param attr 需要格式化的字段名称
* @param object 数据bean
* @return
*/
public static Map<String, Object> formatBody(String[] attr, Object object){
Map<String, Object> map = new HashMap<String, Object>();
if (object == null) {
return map;
}
for (int i = 0; i < attr.length; i++) {
try {
Field field = object.getClass().getDeclaredField(attr[i]);
field.setAccessible(true);
Object value = field.get(object);
if (null == value) {
value = "";
}
map.put(attr[i].toString(), value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return map;
}
/**
* 格式化列表的数据
* @param list 需要格式化的bean列表
* @param attr 需要格式化的字段名称
* @return
*/
public static <E> List<Map<String, Object>> formatList(String[] attr, List<E> list) {
List<Map<String, Object>> jsonList = new ArrayList<>();
if (list != null) {
for (Object object : list) {
jsonList.add(FormatObject.formatBody(attr, object));
}
}
return jsonList;
}
方法调用:
User user= UserDao.getUserDetail(userId);//查询出的用户详情,有name,age,userId字段,但是我不需要age
String attr[] = { "userId", "name" };//需要返回给前端的字段
Map<String, Object> resultMap = FormatObject.formatBody(attr,user)
List<User> userList= UserDao.getUserList();//查询出的用户列表,有name,age,userId字段,但是我不需要age
String attr[] = { "userId", "name" };
List<Map<String, Object>> resultList = FormatObject.formatList(attr,userList)