import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* 表单数据工具类
* @since 2020-12-01 16:16
* @version 1.0
*/
public class FormDataUtil {
/**
* 将一个参数对象转换为formdata参数
*
* @param obj 参数对象
* @return
*/
public static Map<String, Object> parseBean2FormDataMap(Object obj) {
try {
ObjectMapper om = new ObjectMapper();
ObjectNode paramObj = om.createObjectNode();
String objJsonStr = om.writeValueAsString(obj);
JsonNode jsonNode = om.readTree(objJsonStr);
Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
while (fields.hasNext()) {
Entry<String, JsonNode> entry = (Entry<String, JsonNode>) fields.next();
String key = entry.getKey();
JsonNode valueNode = entry.getValue();
if (valueNode.isArray()) {
for (int i = 0; i < valueNode.size(); i++) {
JsonNode valueObject = valueNode.get(i);
Iterator<Entry<String, JsonNode>> fields2 = valueObject.fields();
while (fields2.hasNext()) {
Entry<String, JsonNode> entry2 = (Entry<String, JsonNode>) fields2.next();
String k = entry2.getKey();
JsonNode v = entry2.getValue();
String objKey = key + "[" + i + "]." + k;
String objValue = v.textValue();
paramObj.put(objKey, objValue);
}
}
} else {
String value = valueNode.textValue();
paramObj.put(key, value);
}
}
String paramObjStr = om.writeValueAsString(paramObj);
JavaType type = om.getTypeFactory().constructParametricType(Map.class, String.class, Object.class);
Map<String, Object> map = om.readValue(paramObjStr, type);
return map;
} catch (Exception e) {
throw new RuntimeException("对象转换为formdata数据时出错!", e);
}
}
}