HttpParameterParser.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. package com.yvan.springmvc;
  2. import com.google.common.base.Strings;
  3. import com.google.common.collect.Maps;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import javax.servlet.http.HttpServletRequest;
  7. import java.math.BigDecimal;
  8. import java.text.DateFormat;
  9. import java.text.SimpleDateFormat;
  10. import java.util.*;
  11. /**
  12. * 用来分析 HttpServletRequest 参数
  13. * Created by luoyf on 2016/3/29.
  14. */
  15. public class HttpParameterParser {
  16. private static final Logger log = LoggerFactory.getLogger(HttpParameterParser.class);
  17. private static DateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
  18. public static void setDateFormat(String format) {
  19. DEFAULT_DATE_FORMAT = new SimpleDateFormat(format);
  20. }
  21. private Map<String, String[]> parameters;
  22. private String URI;
  23. @SuppressWarnings("unchecked")
  24. protected HttpParameterParser(HttpServletRequest request) {
  25. parameters = request.getParameterMap();
  26. URI = request.getRequestURI();
  27. }
  28. @SuppressWarnings("unchecked")
  29. private HttpParameterParser(Map<String, String[]> parameters) {
  30. this.parameters = parameters;
  31. }
  32. public static HttpParameterParser newInstance(HttpServletRequest request) {
  33. return new HttpParameterParser(request);
  34. }
  35. public static HttpParameterParser newInstance(Map<String, String[]> rm) {
  36. return new HttpParameterParser(rm);
  37. }
  38. public Map<String, String[]> getParameters() {
  39. return parameters;
  40. }
  41. public String[] getStringArray(String key) {
  42. List<String> values = new ArrayList<String>();
  43. String[] params = parameters.get(key);
  44. if (params == null || params.length == 0) return values.toArray(new String[]{});
  45. for (String param : params) {
  46. if (Strings.isNullOrEmpty(param)) continue;
  47. values.add(param);
  48. }
  49. return values.toArray(new String[]{});
  50. }
  51. public String[] getStringArray(String key, String split) {
  52. String string = getString(key);
  53. if (Strings.isNullOrEmpty(string)) return null;
  54. return string.split(split);
  55. }
  56. public List<String> getStringList(String key) {
  57. String[] stringArray = getStringArray(key);
  58. return getStringList(stringArray);
  59. }
  60. public List<String> getStringList(String key, String split) {
  61. String[] stringArray = getStringArray(key, split);
  62. return getStringList(stringArray);
  63. }
  64. private List<String> getStringList(String[] stringArray) {
  65. if (stringArray == null || stringArray.length == 0) return null;
  66. List<String> result = new ArrayList<String>();
  67. for (int i = 0; i < stringArray.length; i++)
  68. result.add(stringArray[i]);
  69. return result;
  70. }
  71. /**
  72. * 根据请求参数返回int类型数组 如果参数为 null,则返回null 如果某个参数值转换失败则该参数值返回0
  73. *
  74. * @param key
  75. * @return
  76. */
  77. public int[] getIntArray(String key) {
  78. String[] values = getStringArray(key);
  79. if (values == null || values.length == 0) return null;
  80. int[] results = new int[values.length];
  81. for (int i = 0; i < values.length; i++) {
  82. String string = values[i];
  83. try {
  84. results[i] = Integer.parseInt(string);
  85. } catch (Exception e) {
  86. results[i] = 0;
  87. log.info("parse int error : " + string, e);
  88. }
  89. }
  90. return results;
  91. }
  92. public String getString(String key, String defaultValue) {
  93. String[] values = getStringArray(key);
  94. if (values == null || values.length <= 0)
  95. return defaultValue;
  96. else
  97. return values[0].trim();
  98. }
  99. public boolean containsKey(String key) {
  100. return parameters.containsKey(key);
  101. }
  102. public String getString(String key) {
  103. String[] values = getStringArray(key);
  104. if (values != null && values.length > 0) return values[0].trim();
  105. return null;
  106. }
  107. /**
  108. * 当参数值为 :true、是、yes、1、ok 的时候返回True (不区分大小写)<br/>
  109. * 当参数值为空是返回null 否则返回false
  110. *
  111. * @param key
  112. * @return
  113. */
  114. public Boolean getBoolean(String key) {
  115. String str = getString(key);
  116. if (Strings.isNullOrEmpty(str)) return null;
  117. if (str.equalsIgnoreCase("true") || str.equals("1") || str.equals("是") || str.equalsIgnoreCase("yes")
  118. || str.equalsIgnoreCase("ok")) return Boolean.TRUE;
  119. return Boolean.FALSE;
  120. }
  121. /**
  122. * 当参数值为 :true、是、yes、1、ok 的时候返回True (不区分大小写)<br/>
  123. * 否则返回false 当参数值为空时 返回 false
  124. *
  125. * @param key
  126. * @return
  127. */
  128. public boolean getBooleanValue(String key) {
  129. Boolean value = getBoolean(key);
  130. if (value == null) return false;
  131. return value.booleanValue();
  132. }
  133. /**
  134. * 参数值转换为Integer 如果转换失败则返回null
  135. *
  136. * @param key
  137. * @return
  138. */
  139. public Integer getInteger(String key) {
  140. String str = getString(key);
  141. if (Strings.isNullOrEmpty(str)) return null;
  142. try {
  143. return Integer.valueOf(str);
  144. } catch (Exception e) {
  145. log.info("parse int error : " + str, e);
  146. return null;
  147. }
  148. }
  149. /**
  150. * 参数值转换为Integer数组 如果转换失败则返回null
  151. *
  152. * @param key
  153. * @return
  154. */
  155. public Integer[] getIntegerArray(String key) {
  156. String[] values = getStringArray(key);
  157. if (values == null || values.length == 0) return null;
  158. Integer[] results = new Integer[values.length];
  159. for (int i = 0; i < values.length; i++) {
  160. String string = values[i];
  161. try {
  162. results[i] = Integer.valueOf(string);
  163. } catch (Exception e) {
  164. log.info("parse int error : " + string, e);
  165. results[i] = null;
  166. }
  167. }
  168. return results;
  169. }
  170. /**
  171. * 参数值转换为 int 如果转换失败或参数值为 null则返回defaultValue
  172. *
  173. * @param key
  174. * @param defaultValue
  175. * @return
  176. */
  177. public int getIntValue(String key, int defaultValue) {
  178. Integer integer = getInteger(key);
  179. if (integer != null) return integer.intValue();
  180. return defaultValue;
  181. }
  182. /**
  183. * 参数值转换为 int 如果转换失败或参数值为 null则返回 0
  184. *
  185. * @param key
  186. * @return
  187. */
  188. public int getIntValue(String key) {
  189. return getIntValue(key, 0);
  190. }
  191. /**
  192. * 参数值转换为 Double 如果转换失败则返回 null
  193. *
  194. * @param key
  195. * @return
  196. */
  197. public Double getDouble(String key) {
  198. String str = getString(key);
  199. if (Strings.isNullOrEmpty(str)) return null;
  200. try {
  201. return Double.valueOf(str);
  202. } catch (Exception e) {
  203. log.info("parse double error : " + str, e);
  204. return null;
  205. }
  206. }
  207. public double getDoubleValue(String key, double defaultValue) {
  208. Double d = getDouble(key);
  209. if (d != null) return d.doubleValue();
  210. return defaultValue;
  211. }
  212. public double getDoubleValue(String key) {
  213. return getDoubleValue(key, 0d);
  214. }
  215. /**
  216. * 参数值转换为 Long 如果转换失败则返回 null
  217. *
  218. * @param key
  219. * @return
  220. */
  221. public Long getLong(String key) {
  222. String str = getString(key);
  223. if (Strings.isNullOrEmpty(str)) return null;
  224. try {
  225. return Long.valueOf(str);
  226. } catch (Exception e) {
  227. log.info("parse long error : " + str, e);
  228. return null;
  229. }
  230. }
  231. public long getLongValue(String key, long defaultValue) {
  232. Long l = getLong(key);
  233. if (l != null) return l.longValue();
  234. return defaultValue;
  235. }
  236. public long getLongValue(String key) {
  237. return getLongValue(key, 0);
  238. }
  239. /**
  240. * 参数值转换为Long数组 如果转换失败则返回null
  241. *
  242. * @param key
  243. * @return
  244. */
  245. public Long[] getLongWrapperArray(String key) {
  246. String[] values = getStringArray(key);
  247. if (values == null || values.length == 0) return null;
  248. Long[] results = new Long[values.length];
  249. for (int i = 0; i < values.length; i++) {
  250. String string = values[i];
  251. try {
  252. results[i] = Long.valueOf(string);
  253. } catch (Exception e) {
  254. log.info("parse int error : " + string, e);
  255. results[i] = null;
  256. }
  257. }
  258. return results;
  259. }
  260. /**
  261. * 根据请求参数返回long类型数组 如果参数为 null,则返回null 如果某个参数值转换失败则该参数值返回0
  262. *
  263. * @param key
  264. * @return
  265. */
  266. public long[] getLongArray(String key) {
  267. String[] values = getStringArray(key);
  268. if (values == null || values.length == 0) return null;
  269. long[] results = new long[values.length];
  270. for (int i = 0; i < values.length; i++) {
  271. String string = values[i];
  272. try {
  273. results[i] = Long.parseLong(string);
  274. } catch (Exception e) {
  275. results[i] = 0;
  276. log.info("parse int error : " + string, e);
  277. }
  278. }
  279. return results;
  280. }
  281. public Short getShort(String key) {
  282. String str = getString(key);
  283. if (Strings.isNullOrEmpty(str)) return null;
  284. try {
  285. return Short.valueOf(str);
  286. } catch (Exception e) {
  287. log.info("parse short error : " + str, e);
  288. return null;
  289. }
  290. }
  291. public Short[] getShortArray(String key) {
  292. String[] values = getStringArray(key);
  293. if (values == null || values.length == 0) return null;
  294. Short[] results = new Short[values.length];
  295. for (int i = 0; i < values.length; i++) {
  296. String string = values[i];
  297. try {
  298. results[i] = Short.valueOf(string);
  299. } catch (Exception e) {
  300. log.info("parse short error : " + string, e);
  301. results[i] = null;
  302. }
  303. }
  304. return results;
  305. }
  306. public short getShortValue(String key, short defaultValue) {
  307. Short s = getShort(key);
  308. if (s != null) return s.shortValue();
  309. return defaultValue;
  310. }
  311. public short getShortValue(String key) {
  312. return getShortValue(key, (short) 0);
  313. }
  314. /**
  315. * 参数值转换为日期
  316. *
  317. * @param key
  318. * @param format 日期格式:如果为null则采用默认的日期格式"yyyy-MM-dd"
  319. * @return
  320. */
  321. public Date getDate(String key, String format) {
  322. Date date = null;
  323. String str = getString(key);
  324. if (Strings.isNullOrEmpty(str)) return null;
  325. DateFormat dateFormat = format == null ? DEFAULT_DATE_FORMAT : new SimpleDateFormat(format);
  326. try {
  327. date = dateFormat.parse(str);
  328. } catch (Exception e) {
  329. log.info("parse date error : " + str, e);
  330. return null;
  331. }
  332. return date;
  333. }
  334. /**
  335. * 参数值转换为日期 (采用默认的日期格式"yyyy-MM-dd")
  336. *
  337. * @param key
  338. * @return
  339. */
  340. public Date getDate(String key) {
  341. return getDate(key, null);
  342. }
  343. public java.sql.Date getSqlDate(String key, String format) {
  344. Date date = getDate(key, format);
  345. if (date != null) return new java.sql.Date(date.getTime());
  346. else return null;
  347. }
  348. public java.sql.Date getSqlDate(String key) {
  349. return getSqlDate(key, null);
  350. }
  351. public BigDecimal getBigDecimal(String key) {
  352. String value = getString(key);
  353. if (Strings.isNullOrEmpty(value)) return null;
  354. try {
  355. return new BigDecimal(value);
  356. } catch (Exception e) {
  357. log.info("parse date error : " + value, e);
  358. return null;
  359. }
  360. }
  361. public Calendar getCalendar(String key) {
  362. Date date = getDate(key);
  363. if (date == null) return null;
  364. Calendar cal = Calendar.getInstance();
  365. cal.setTime(date);
  366. return cal;
  367. }
  368. /**
  369. * 得到请求参数的字符串表现形式
  370. *
  371. * @return
  372. */
  373. public String toParameterString() {
  374. StringBuilder sb = new StringBuilder(URI);
  375. if (parameters == null || parameters.size() == 0) return sb.toString();
  376. sb.append("?");
  377. for (String key : parameters.keySet()) {
  378. String[] values = getStringArray(key);
  379. for (String value : values) {
  380. sb.append(key).append("=").append(value).append("&");
  381. }
  382. }
  383. return sb.toString();
  384. }
  385. /**
  386. * 变成Map
  387. */
  388. public Map<String, Object> getMap() {
  389. Map<String, Object> map = Maps.newLinkedHashMap();
  390. for (String key : parameters.keySet()) {
  391. map.put(key, getString(key));
  392. }
  393. return map;
  394. }
  395. }