java 网页参数转换
来源:互联网 发布:冷核聚变知乎 编辑:程序博客网 时间:2024/06/06 21:50
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.util.*;public class UrlParamUtil { private static final Log log; /** * 将map参数转换成网页参数,当map不为空时转换结果为 e.g id=1&username=2,反之为null * 支持key值为List集合,默认其值为基本类型,除key的值类型为List外,默认值为基本类型进行生成参数 * e.g Map<String, Object> stringMap = new LinkedHashMap<String, Object>(); stringMap.put("value1", new String[]{"1", "2"}); stringMap.put("value2", new Object[]{"1", "2"}); stringMap.put("value3", new Object[]{"1"}); stringMap.put("value4", true); stringMap.put("value5", Arrays.asList("1", "2")); // result: value1=1&value1=2&value2=1&value2=2&value3=1&value4=true&value5=1&value5=2 * * @param map {id:[1, 2, 3], value: 1}; * @return null/id=1&username=2 */ public static String parseMapToUrlParams(Map<String, ?> map) { String result = null; if (map != null) { StringBuffer sb = new StringBuffer(); boolean hasValue = false; for (Map.Entry<String, ?> entry : map.entrySet()) { hasValue = true; String key = entry.getKey(); Object value = entry.getValue(); if (value == null) { parseMapToUrlParamsAppend(sb, key, null); } else { if (ListOrArrayUtil.isArray(value)) { //是数组或List时 int size = ListOrArrayUtil.getArraySize(value); if (size > 0) { for (int i = 0; i < size; i++) { Object currentValue = ListOrArrayUtil.getArrayValue(value, i); if (currentValue == null) { parseMapToUrlParamsAppend(sb, key, null); } else { //判断是否为支持的数据类型,支持时进行拼接 appendSimpleData(currentValue, sb, key); } } } else { parseMapToUrlParamsAppend(sb, key, null); } } else { //判断是否为支持的数据类型,支持时进行拼接 appendSimpleData(value, sb, key); } } } if (hasValue) { //移除最后多余的& int length = sb.length(); sb.delete(length - 1, length); } result = sb.toString(); if (result.equals("")) { result = null; } } return result; } public static Map<String, List<String>> parseParamsToMap(String url) { Map<String, List<String>> resultMap = null; if (url != null) { int index = url.indexOf("?"); if (index >= 0) { url = url.substring(index + 1); } String[] array = url.split("&"); if (array != null && array.length > 0) { resultMap = new LinkedHashMap<String, List<String>>(); for(String value: array) { index = value.indexOf("="); if (index > 0) { String key = value.substring(0, index); if (key != null) { key = key.trim(); if (key.length() > 0) { String currentValue = value.substring(index + 1); if (currentValue != null) { List<String> list = resultMap.get(key); if (list == null) { list = new ArrayList<String>(); resultMap.put(key, list); } list.add(currentValue); } } } } } } } return resultMap; } /** * 用于生成网页参数时的拼接函数 * @param sb * @param key * @param value */ private static void parseMapToUrlParamsAppend(StringBuffer sb, String key, Object value) { if (sb != null) { if (value == null) { value = ""; } sb.append(key); sb.append("="); sb.append(value); sb.append("&"); } } /** * 判断是否为支持的数据类型,支持时进行拼接,不支持时输出提示信息 * @param value * @param sb * @param key */ private static void appendSimpleData(Object value, StringBuffer sb, String key) { if (value != null) { Class<?> currentValueClass = value.getClass(); if (SimpleDataUtil.support(currentValueClass)) { //如果支持此类型时 if (currentValueClass.equals(String.class)) { value = ResponseEncodeUtil.encode((String) value); } parseMapToUrlParamsAppend(sb, key, value); } else { if (log.isInfoEnabled()) { log.info(" not support " + currentValueClass.getName() + ",\n continue append the key: " + key + ", value: " + value); } } } } public static void main(String[] args) { Map<String, Object> stringMap = new LinkedHashMap<String, Object>(); stringMap.put("value1", new String[]{"1", "2"}); stringMap.put("value2", new Object[]{"1", "2"}); stringMap.put("value3", new Object[]{"1", Arrays.asList("1"), true}); stringMap.put("value4", true); stringMap.put("value5", Arrays.asList("1", 1, 1l, 1.0f, 1.0d, true, new Date(), (short)1)); System.out.println(parseMapToUrlParams(stringMap)); // value1=1&value1=2&value2=1&value2=2&value3=1&value3=true&value4=true&value5=1&value5=1&value5=1&value5=1.0&value5=1.0&value5=true&value5=1 System.out.println(parseParamsToMap("?value1=1&value1=2&value2=1&value2=2&value3=1&value3=true&value4=true&value5=1&value5=1&value5=1&value5=1.0&value5=1.0&value5=true&value5=1")); //{value1=[1, 2], value2=[1, 2], value3=[1, true], value4=[true], value5=[1, 1, 1, 1.0, 1.0, true, 1]} } static { log = LogFactory.getLog(UrlParamUtil.class); }}
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.lang.reflect.Array;import java.util.List;/** * List对象或数组[]工具类 */public class ListOrArrayUtil { private final static Log log; /** * 判断该对象是否为数组 * @param object * @return */ public static boolean isArray(Object object) { if (object != null) { if (object instanceof List) { return true; } else if (object.getClass().isArray()) { return true; } } return false; } /** * 获取该数组的大小 * @param object * @return */ public static int getArraySize(Object object) { int size = 0; if (object != null) { if (object instanceof List) { size = ((List) object).size(); } else if (object.getClass().isArray()) { size = Array.getLength(object); } else { if (log.isWarnEnabled()) { log.warn(object + "is not array"); } } } else { if (log.isWarnEnabled()) { log.warn("the value is null"); } } return size; } /** * 获取该数组对象对应索引的值 * @param object --- List对象或[]数组 * @param index * @return */ public static Object getArrayValue(Object object, int index) { if (object instanceof List) { return ((List) object).get(index); } else { if (object.getClass().isArray()) { return Array.get(object, index); } } return null; } static { log = LogFactory.getLog(ListOrArrayUtil.class); }}
import java.util.HashMap;import java.util.Map;/** * 判断是否对以下数据类型的支持 * Long/long Short/short String Boolean/boolean Float/float Integer/int Double/double */public class SimpleDataUtil { private static final Map<Class, Class> SUPPORT_MAP = new HashMap<Class, Class>();; static { SUPPORT_MAP.put(String.class, String.class); SUPPORT_MAP.put(Integer.class, Integer.class); SUPPORT_MAP.put(int.class, Integer.class); SUPPORT_MAP.put(Long.class, Long.class); SUPPORT_MAP.put(long.class, Long.class); SUPPORT_MAP.put(Short.class, Short.class); SUPPORT_MAP.put(short.class, Short.class); SUPPORT_MAP.put(Boolean.class, Boolean.class); SUPPORT_MAP.put(boolean.class, Boolean.class); SUPPORT_MAP.put(Float.class, Float.class); SUPPORT_MAP.put(float.class, Float.class); SUPPORT_MAP.put(Double.class, Double.class); SUPPORT_MAP.put(double.class, Double.class); } /** * 判断是否支持该类型 * @param type * @return */ public static boolean support(Class<?> type) { if (type != null && SUPPORT_MAP.containsKey(type)) { return true; } else { return false; } } /** * 获取该类型对应的包装类 * @param type * @return */ public static Class<?> getWrapperClass(Class<?> type) { return SUPPORT_MAP.get(type); }}
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.net.URLEncoder;public class ResponseEncodeUtil { private static final Log log; private static Method encode; /** * Filter the specified string for characters that are senstive to HTML * interpreters, returning the string with these characters replaced by * the corresponding character entities. * * @param value The string to be filtered and returned */ public static String filter(String value) { if ((value == null) || (value.length() == 0)) { return value; } StringBuffer result = null; String filtered = null; for (int i = 0; i < value.length(); i++) { filtered = null; switch (value.charAt(i)) { case '<': filtered = "<"; break; case '>': filtered = ">"; break; case '&': filtered = "&"; break; case '"': filtered = """; break; case '\'': filtered = "'"; break; } if (result == null) { if (filtered != null) { result = new StringBuffer(value.length() + 50); if (i > 0) { result.append(value.substring(0, i)); } result.append(filtered); } } else { if (filtered == null) { result.append(value.charAt(i)); } else { result.append(filtered); } } } return (result == null) ? value : result.toString(); } /** * URLencodes a string assuming the character encoding is UTF-8. * * @param value * @return String The encoded value in UTF-8 */ public static String encode(String value) { return encode(value, "UTF-8"); } /** * Use the new URLEncoder.encode() method from Java 1.4 if available, else * use the old deprecated version. This method uses reflection to find * the appropriate method; if the reflection operations throw exceptions, * this will return the url encoded with the old URLEncoder.encode() * method. * @param value * @param enc The character encoding the urlencode is performed on. * @return String The encoded value. */ public static String encode(String value, String enc) { try { if ((enc == null) || (enc.length() == 0)) { enc = "UTF-8"; } // encode url with new 1.4 method and UTF-8 encoding if (encode != null) { return (String) encode.invoke(null, new Object[] { value, enc }); } } catch (IllegalAccessException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } catch (InvocationTargetException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } return URLEncoder.encode(value); } public static void main(String[] args) { System.out.println(filter("<script>alert(2333);</script>")); System.out.println(encode("张三")); } static { log = LogFactory.getLog(ResponseEncodeUtil.class); try { Class[] args = new Class[]{String.class, String.class}; encode = URLEncoder.class.getMethod("encode", args); } catch (NoSuchMethodException var1) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", var1); } }}
阅读全文
0 0
- java 网页参数转换
- java 转换url中文参数
- Java读取word文档,转换为网页
- Java读取word文档,转换为网页
- java与c之间的参数转换
- java与c之间的参数转换
- java与c之间的参数转换
- api param参数转换为hashmap java
- Java 集合参数处理(转换Objcet对象)
- java方法重载--参数类型转换
- java与c之间的参数转换
- java中url参数转换成map
- java数据类型转换____request请求参数类型转换
- java程序用post方式给某一网页传递参数
- Java Apache HttpClient post 获取提交参数并获取网页
- 用java方式将微软文档转换成在线网页
- java语言把网页相对URL转换成绝对URL
- 网页传递中文参数
- Java语法基础练习题1
- System.Web.Caching.Cache类 缓存 各种缓存依赖
- Linux Apache FTP-Server架设
- qt+opencv实现拍照,打开视频,图像处理操作
- Android USB Camera(1) : 调试记录
- java 网页参数转换
- 树DP 树上染色
- Map、Set、List、Queue、Stack的特点与用法
- 零售快消品B2B“货圈全”产品分析报告
- react-native imageButton 可设置默认图片,避免加载失败空白
- Java]NIO:使用Channel、Charset(字符集)、使用Charset传递CharBuffer
- Excel设置扩展数据区域实现输入新行自动扩展上行公式
- Collections
- C++ bug tips