1、工具类
/**
* @Description //TODO
* @Date 2020/3/5 16:06
* @Author huangwb
**/
public class MapDecodeValueUtils {
/**
* @return void
* @Author huangwb
* @Description //TODO 解密map中的value
* @Date 2020/3/5 15:55
* @Param [map 参数]
**/
public static <V> void mapDecodeValue(Map<String, V> map) {
if (map == null) {
return;
}
mapDecodeValue(map, null, null, null);
}
/**
* @return void
* @Author huangwb
* @Description //TODO 解密map中的value
* @Date 2020/3/5 15:55
* @Param [map 参数, mustFillField 必填字段(多个逗号隔开), mustFillFieldMessage 必填字段为空提示信息(多个逗号隔开)]
**/
public static <V> void mapDecodeValue(Map<String, V> map, String notEncodeField) {
if (map == null) {
return;
}
mapDecodeValue(map, null, notEncodeField, null);
}
/**
* @return void
* @Author huangwb
* @Description //TODO 解密map中的value
* @Date 2020/3/5 15:55
* @Param [map 参数, mustFillField 必填字段(多个逗号隔开), mustFillFieldMessage 必填字段为空提示信息(多个逗号隔开)]
**/
public static <V> void mapDecodeValue(Map<String, V> map, String mustFillField, String mustFillFieldMessage) {
if (map == null) {
return;
}
mapDecodeValue(map, mustFillField, null, mustFillFieldMessage);
}
/**
* @return void
* @Author huangwb
* @Description //TODO 解密map中的value
* @Date 2020/3/5 15:55
* @Param [map 参数, mustFillField 必填字段(多个逗号隔开), notEncodeField 不需要解密字段(多个逗号隔开), mustFillFieldMessage 必填字段为空提示信息(多个逗号隔开)]
**/
public static <V> void mapDecodeValue(Map<String, V> map, String mustFillField, String notEncodeField, String mustFillFieldMessage) {
if (map == null) {
return;
}
//验证mustFillField(必填字段)和mustFillFieldMessage(必填字段为空提示信息)总数是否相等
//验证mustFillField(必填字段)在map中是否存在为空的情况 如果存在为空则mustFillFieldMessage(必填字段为空提示信息)报出异常信息
isValidateMustFillField(map, mustFillField, mustFillFieldMessage);
//不加密字段集合
List<String> notEncodeFieldList = null;
if (!Strings.isNullOrEmpty(notEncodeField)) {
String[] notEncodeFieldSplit = notEncodeField.split(",");
notEncodeFieldList = Arrays.asList(notEncodeFieldSplit);
}
Iterator<Map.Entry<String, V>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, V> next = iterator.next();
V value = next.getValue();
if (value != null && !Strings.isNullOrEmpty(value.toString())) {
String key = next.getKey();
//如果为不加密字段
if (notEncodeFieldList != null && !notEncodeFieldList.isEmpty() && notEncodeFieldList.contains(key)) {
map.put(key, value);
} else {
map.put(key, (V) Base64Utils.decode(value.toString()));
}
}
}
}
/**
* @return void
* @Author huangwb
* @Description //TODO 验证mustFillField(必填字段)和mustFillFieldMessage(必填字段为空提示信息)总数是否相等
* //TODO 验证mustFillField(必填字段)在map中是否存在为空的情况 如果存在为空则mustFillFieldMessage(必填字段为空提示信息)报出异常信息
* @Date 2020/3/5 16:22
* @Param [map(参数), mustFillField(必填字段), mustFillFieldMessage(必填字段为空提示信息)]
**/
private static <V> void isValidateMustFillField(Map<String, V> map, String mustFillField, String mustFillFieldMessage) {
if (map == null) {
return;
}
//如果没有必填字段
if (Strings.isNullOrEmpty(mustFillField)) {
return;
}
if (Strings.isNullOrEmpty(mustFillFieldMessage)) {
throw new RuntimeException("请填写提示信息!");
}
//将多个逗号隔开的参数转换成数组
String[] mustFillFieldSplit = mustFillField.split(",");
String[] mustFillFieldMessageSplit = mustFillFieldMessage.split(",");
//判断所需的字段和提示信息总数是否匹配
if (mustFillFieldSplit.length != mustFillFieldMessageSplit.length) {
throw new RuntimeException("所需的字段和提示信息总数不相匹配!");
}
List<String> mustFillFieldList = Arrays.asList(mustFillFieldSplit);
List<String> mustFillFieldMessageList = Arrays.asList(mustFillFieldMessageSplit);
for (int i = 0; i < mustFillFieldList.size(); i++) {
String data = mustFillFieldList.get(i);
V mapValue = map.get(data);
if (mapValue == null || Strings.isNullOrEmpty(mapValue.toString())) {
throw new NotNullException(mustFillFieldMessageList.get(i));
}
}
}
}
2、用法
//map中的key对应的值都进行解密 且进行参数二的空值字段校验
//第一个参数 接收的map
//第二个参数 必填字段
//第三个参数必填字段说明
MapDecodeValueUtils.mapDecodeValue(map
, "targetId,userId,targetType"
, "目标id不能为空,用户id不能为空,目标类型不能为空");
//除了参数三中对应的key,其他map中的key对应的值都进行解密 且进行参数二的空值字段校验
//第一个参数 接收的map
//第二个参数 必填字段
//第三个参数 不进行解密的字段
//第四个参数 必填字段说明
MapDecodeValueUtils.mapDecodeValue(map,"targetId,userId,targetType"
,"page,pageSize","目标id不能为空,用户id不能为空,目标类型不能为空");
//除了参数二中对应的key,其他map中的key对应的值都进行解密
//第一个参数 接收的map
// 第二个参数 不进行解密的字段
MapDecodeValueUtils.mapDecodeValue(map,"page,pageSize");
//整个map中所有的key对应的值都进行解密 不做任何空值判断
// 第一个参数 接收的map
MapDecodeValueUtils.mapDecodeValue(map);