返回map格式化属性为String类型
对接app时客户端会要求后台接口返回字段全部为String类型,方便他们操作,所以写了下面的方法进行转化:
/**
* 对map返回值进行字符串转化
*
* @param map 目标map
* @return
*/
public static Map<String, Object> formatMapToStringMap(Map<String, Object> map) {
Map<String, Object> stringMap = new HashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (null == entry.getValue()) {
stringMap.put(entry.getKey(), entry.getValue());
} else {
Class<?> aClass = entry.getValue().getClass();
if (toMapClass.contains(aClass)) {
String key = entry.getKey();
// 此处需要转化 否则会报错
Map mapToStringMap = formatMapToStringMap(JsonUtils.objectToObject(entry.getValue(), LinkedHashMap.class));
stringMap.put(key, mapToStringMap);
continue;
}
if (toStringClass.contains(aClass)) {
stringMap.put(entry.getKey(), (entry.getValue() + ""));
} else {
stringMap.put(entry.getKey(), entry.getValue());
}
}
}
return stringMap;
}
private static List<Object> toStringClass = new ArrayList<>();
static {
toStringClass.add(Float.class);
toStringClass.add(Double.class);
toStringClass.add(Integer.class);
toStringClass.add(BigDecimal.class);
}
private static List<Object> toMapClass = new ArrayList<>();
static {
toMapClass.add(Map.class);
toMapClass.add(HashMap.class);
toMapClass.add(LinkedHashMap.class);
toMapClass.add(TreeMap.class);
}