ValidationUtil.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. package com.fuzamei.utils;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Set;
  6. import javax.validation.ConstraintViolation;
  7. import javax.validation.Validation;
  8. import javax.validation.Validator;
  9. import javax.validation.ValidatorFactory;
  10. import org.springframework.util.StringUtils;
  11. import com.alibaba.fastjson.JSON;
  12. /**
  13. *
  14. * @author ylx
  15. * @describe: 针对hibernate-validator的实体类进行数据校验的工具类
  16. * @describe: 针对该项目中其它各类数据校验的工具类
  17. * @Date: 2017-12-26
  18. */
  19. public class ValidationUtil {
  20. private ValidationUtil() {
  21. throw new AssertionError("不能实例化 ValidationUtil");
  22. }
  23. /**
  24. * @Title: validate
  25. * @Description: TODO(仅针对校验一个实体类的所有校验失败信息)
  26. * @return List<String> 返回的是数据校验的所有校验失败信息,封装在一个list中作为返回值
  27. * @author ylx
  28. * @date 2017年12月26日 下午3:48:40
  29. */
  30. public static <T> List<String> validate(T bo) {
  31. ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  32. Validator validator = factory.getValidator();
  33. Set<ConstraintViolation<T>> validateSet = validator.validate(bo);
  34. List<String> list = new ArrayList<String>();
  35. for (ConstraintViolation<T> validate : validateSet) {
  36. list.add(validate.getMessage());
  37. }
  38. return list; // 包含所有校验出错的信息
  39. /*
  40. * 使用hibernate validator出现上面的错误, 需要 注意
  41. *
  42. * @NotNull 和 @NotEmpty 和@NotBlank 区别
  43. *
  44. * @NotEmpty 用在集合类上面
  45. *
  46. * @NotBlank 用在String上面
  47. *
  48. * @NotNull 用在基本类型上
  49. */
  50. }
  51. /**
  52. * @Title: checkRangeOfInt
  53. * @Description: 针对传入的参数进行校验--->Integer类型
  54. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  55. * 而且还要限定数值的范围,超出范围的也会报异常.
  56. * 如果一切都解析正常,返回一个true的布尔类型
  57. * @Usage: 适用于数据判断的校验
  58. * @return boolean
  59. * @author ylx
  60. * @date 2017年12月26日 下午3:48:40
  61. */
  62. public static boolean checkRangeOfInt(final Object obj, int min, int max) {
  63. String number = null;
  64. try {
  65. if (obj == null) {
  66. throw new NullPointerException();
  67. }
  68. number = String.class.cast(obj);
  69. try {
  70. Integer.parseInt(number);
  71. } catch (NumberFormatException e) {
  72. throw new NumberFormatException();
  73. }
  74. } catch (Exception e) {
  75. if (e instanceof NullPointerException) {
  76. throw new NullPointerException("对象为null");
  77. }
  78. if (e instanceof NumberFormatException) {
  79. throw new RuntimeException("数据类型解析异常");
  80. }
  81. Integer num = null;
  82. try {
  83. num = Integer.class.cast(obj);
  84. } catch (Exception e1) {
  85. throw new RuntimeException("数字解析异常");
  86. }
  87. if (num < min) {
  88. throw new RuntimeException("最小值应该大于等于"+min);
  89. }
  90. if(num > max){
  91. throw new RuntimeException("最大值应该小于等于"+max);
  92. }
  93. }
  94. return true;
  95. }
  96. /**
  97. * @Title: checkMinOfInt
  98. * @Description: 针对传入的参数进行校验--->Integer类型
  99. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  100. * 而且还要限定数值的最小值,小于最小值的也会报异常.
  101. * 如果一切都解析正常,返回一个true的布尔类型
  102. * @Usage: 适用于数据判断的校验
  103. * @return boolean
  104. * @author ylx
  105. * @date 2017年12月26日 下午3:48:40
  106. */
  107. public static boolean checkMinOfInt(final Object obj, int min) {
  108. return checkRangeOfInt(obj, min, Integer.MAX_VALUE);
  109. }
  110. /**
  111. * @Title: checkMaxOfInt
  112. * @Description: 针对传入的参数进行校验--->Integer类型
  113. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  114. * 而且还要限定数值的最大值,大于最大值的也会报异常.
  115. * 如果一切都解析正常,返回一个true的布尔类型
  116. * @Usage: 适用于数据判断的校验
  117. * @return boolean
  118. * @author ylx
  119. * @date 2017年12月26日 下午3:48:40
  120. */
  121. public static boolean checkMaxOfInt(final Object obj, int max) {
  122. return checkRangeOfInt(obj, Integer.MIN_VALUE, max);
  123. }
  124. /**
  125. * @Title: checkOfInt
  126. * @Description: 针对传入的参数进行校验--->Integer类型
  127. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  128. * 针对整个Integer范围内的数据校验(也就是能被解析成Integer的String还是Integer就能校验成功返回true)
  129. * 如果一切都解析正常,返回一个true的布尔类型
  130. * @Usage: 适用于数据判断的校验
  131. * @return boolean
  132. * @author ylx
  133. * @date 2017年12月26日 下午3:48:40
  134. */
  135. public static boolean checkOfInt(final Object obj) {
  136. return checkRangeOfInt(obj, Integer.MIN_VALUE, Integer.MAX_VALUE);
  137. }
  138. /**
  139. * @Title: checkRangeOfLong
  140. * @Description: 针对传入的参数进行校验--->Long类型
  141. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  142. * 而且还要限定数值的范围,超出范围的也会报异常.
  143. * 如果一切都解析正常,返回一个true的布尔类型
  144. * @Usage: 适用于数据判断的校验
  145. * @return boolean
  146. * @author ylx
  147. * @date 2017年12月26日 下午3:48:40
  148. */
  149. public static boolean checkRangeOfLong(final Object obj, long min, long max) {
  150. String number = null;
  151. try {
  152. if (obj == null) {
  153. throw new NullPointerException();
  154. }
  155. number = String.class.cast(obj);
  156. try {
  157. Long.parseLong(number);
  158. } catch (NumberFormatException e) {
  159. throw new NumberFormatException();
  160. }
  161. } catch (Exception e) {
  162. if (e instanceof NullPointerException) {
  163. throw new NullPointerException("对象为null");
  164. }
  165. if (e instanceof NumberFormatException) {
  166. throw new RuntimeException("数据类型解析异常");
  167. }
  168. Long num = null;
  169. try {
  170. num=Long.parseLong(""+obj);
  171. } catch (Exception e1) {
  172. throw new RuntimeException("数字解析异常");
  173. }
  174. if (num < min) {
  175. throw new RuntimeException("最小值应该大于等于"+min);
  176. }
  177. if(num > max){
  178. throw new RuntimeException("最大值应该小于等于"+max);
  179. }
  180. }
  181. return true;
  182. }
  183. /**
  184. * @Title: checkMinOfLong
  185. * @Description: 针对传入的参数进行校验--->Long类型
  186. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  187. * 而且还要限定数值的最小值,小于最小值的也会报异常.
  188. * 如果一切都解析正常,返回一个true的布尔类型
  189. * @Usage: 适用于数据判断的校验
  190. * @return boolean
  191. * @author ylx
  192. * @date 2017年12月26日 下午3:48:40
  193. */
  194. public static boolean checkMinOfLong(final Object obj, long min) {
  195. return checkRangeOfLong(obj, min, Long.MAX_VALUE);
  196. }
  197. /**
  198. * @Title: checkMaxOfLong
  199. * @Description: 针对传入的参数进行校验--->Long类型
  200. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  201. * 而且还要限定数值的最大值,大于最大值的也会报异常.
  202. * 如果一切都解析正常,返回一个true的布尔类型
  203. * @Usage: 适用于数据判断的校验
  204. * @return boolean
  205. * @author ylx
  206. * @date 2017年12月26日 下午3:48:40
  207. */
  208. public static boolean checkMaxOfLong(final Object obj, long max) {
  209. return checkRangeOfLong(obj, Long.MIN_VALUE, max);
  210. }
  211. /**
  212. * @Title: checkOfLong
  213. * @Description: 针对传入的参数进行校验--->Long类型
  214. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  215. * 这个针对Long范围内类型数据的校验
  216. * 如果一切都解析正常,返回一个true的布尔类型
  217. * @Usage: 适用于数据判断的校验
  218. * @return boolean
  219. * @author ylx
  220. * @date 2017年12月26日 下午3:48:40
  221. */
  222. public static boolean checkOfLong(final Object obj) {
  223. return checkRangeOfLong(obj, Long.MIN_VALUE, Long.MAX_VALUE);
  224. }
  225. /**
  226. * @Title: checkRangeAndAssignInt
  227. * @Description: 针对传入的参数进行校验--->Integer类型
  228. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  229. * 而且还要限定数值的范围,超出范围的也会报异常.
  230. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以int类型返回
  231. * @Usage: 适用于数据判断的校验和赋值同时进行
  232. * @return int
  233. * @author ylx
  234. * @date 2017年12月26日 下午3:48:40
  235. */
  236. public static int checkRangeAndAssignInt(final Object obj, int min, int max) {
  237. String number = null;
  238. try {
  239. if (obj == null) {
  240. throw new NullPointerException();
  241. }
  242. number = String.class.cast(obj);
  243. try {
  244. return Integer.parseInt(number);
  245. } catch (NumberFormatException e) {
  246. throw new NumberFormatException();
  247. }
  248. } catch (Exception e) {
  249. if (e instanceof NullPointerException) {
  250. throw new NullPointerException("对象为null");
  251. }
  252. if (e instanceof NumberFormatException) {
  253. throw new RuntimeException("数据类型解析异常");
  254. }
  255. Integer num = null;
  256. try {
  257. num = Integer.class.cast(obj);
  258. } catch (Exception e1) {
  259. throw new RuntimeException("数字解析异常");
  260. }
  261. if (num < min) {
  262. throw new RuntimeException("最小值应该大于等于"+min);
  263. }
  264. if(num > max){
  265. throw new RuntimeException("最大值应该小于等于"+max);
  266. }
  267. return num;
  268. }
  269. }
  270. /**
  271. * @Title: checkMinAndAssignInt
  272. * @Description: 针对传入的参数进行校验--->Integer类型
  273. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  274. * 而且还要限定数值的最小值,小于最小值的也会报异常.
  275. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以int类型返回
  276. * @Usage: 适用于数据判断的校验和赋值同时进行
  277. * @return int
  278. * @author ylx
  279. * @date 2017年12月26日 下午3:48:40
  280. */
  281. public static int checkMinAndAssignInt(final Object obj, int min) {
  282. return checkRangeAndAssignInt(obj,min,Integer.MAX_VALUE);
  283. }
  284. /**
  285. * @Title: checkMaxAndAssignInt
  286. * @Description: 针对传入的参数进行校验--->Integer类型
  287. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  288. * 而且还要限定数值的最大值,大于最大值的也会报异常.
  289. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以int类型返回
  290. * @Usage: 适用于数据判断的校验和赋值同时进行
  291. * @return int
  292. * @author ylx
  293. * @date 2017年12月26日 下午3:48:40
  294. */
  295. public static int checkMaxAndAssignInt(final Object obj, int max) {
  296. return checkRangeAndAssignInt(obj,Integer.MIN_VALUE,max);
  297. }
  298. /**
  299. * @Title: checkAndAssignInt
  300. * @Description: 针对传入的参数进行校验--->Integer类型
  301. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Integer类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  302. * 这个针对Integer范围内类型数据的校验和赋值
  303. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以int类型返回
  304. * @Usage: 适用于数据判断的校验和赋值同时进行
  305. * @return int
  306. * @author ylx
  307. * @date 2017年12月26日 下午3:48:40
  308. */
  309. public static int checkAndAssignInt(final Object obj) {
  310. return checkRangeAndAssignInt(obj,Integer.MIN_VALUE,Integer.MAX_VALUE);
  311. }
  312. /**
  313. * @Title: range
  314. * @Description: 针对传入的参数进行校验--->Long类型
  315. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  316. * 而且还要限定数值的范围,超出范围的也会报异常.
  317. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以long类型返回
  318. * @Usage: 适用于数据判断的校验和赋值同时进行
  319. * @return long
  320. * @author ylx
  321. * @date 2017年12月26日 下午3:48:40
  322. */
  323. public static long checkRangeAndAssignLong(final Object obj, long min, long max) {
  324. String number = null;
  325. try {
  326. if (obj == null) {
  327. throw new NullPointerException();
  328. }
  329. number = String.class.cast(obj);
  330. try {
  331. return Long.parseLong(number);
  332. } catch (NumberFormatException e) {
  333. throw new NumberFormatException();
  334. }
  335. } catch (Exception e) {
  336. if (e instanceof NullPointerException) {
  337. throw new NullPointerException("对象为null");
  338. }
  339. if (e instanceof NumberFormatException) {
  340. throw new RuntimeException("数据类型解析异常");
  341. }
  342. Long num = null;
  343. try {
  344. num=Long.parseLong(""+obj);
  345. } catch (Exception e1) {
  346. throw new RuntimeException("数字解析异常");
  347. }
  348. if (num < min) {
  349. throw new RuntimeException("最小值应该大于等于"+min);
  350. }
  351. if(num > max){
  352. throw new RuntimeException("最大值应该小于等于"+max);
  353. }
  354. return num;
  355. }
  356. }
  357. /**
  358. * @Title: range
  359. * @Description: 针对传入的参数进行校验--->Long类型
  360. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  361. * 而且还要限定数值的最小值,小于最小值的也会报异常.
  362. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以long类型返回
  363. * @Usage: 适用于数据判断的校验和赋值同时进行
  364. * @return long
  365. * @author ylx
  366. * @date 2017年12月26日 下午3:48:40
  367. */
  368. public static long checkMinAndAssignLong(final Object obj, long min) {
  369. return checkRangeAndAssignLong(obj,min,Long.MAX_VALUE);
  370. }
  371. /**
  372. * @Title: range
  373. * @Description: 针对传入的参数进行校验--->Long类型
  374. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  375. * 而且还要限定数值的最大值,大于最大值的也会报异常.
  376. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以long类型返回
  377. * @Usage: 适用于数据判断的校验和赋值同时进行
  378. * @return long
  379. * @author ylx
  380. * @date 2017年12月26日 下午3:48:40
  381. */
  382. public static long checkMaxAndAssignLong(final Object obj, long max) {
  383. return checkRangeAndAssignLong(obj,Long.MIN_VALUE,max);
  384. }
  385. /**
  386. * @Title: range
  387. * @Description: 针对传入的参数进行校验--->Long类型
  388. * @Detail: 参数类型虽然是Object,但是要求数据类型是String或者是Long类型的数据,而且String类型还必须是能被解析成整数的,否则会抛出异常.
  389. * 这个针对Long范围内类型数据的校验和赋值
  390. * 如果一切都解析正常,说明解析没有问题,结果将解析后的数值以long类型返回
  391. * @Usage: 适用于数据判断的校验和赋值同时进行
  392. * @return long
  393. * @author ylx
  394. * @date 2017年12月26日 下午3:48:40
  395. */
  396. public static long checkAndAssignLong(final Object obj) {
  397. return checkRangeAndAssignLong(obj,Long.MIN_VALUE,Long.MAX_VALUE);
  398. }
  399. /**
  400. * @Title: range
  401. * @Target: 针对空(null)
  402. * @Description: TODO(针对传入的参数进行非空(null)校验并返回string数据类型--->只针对String类型,校验和赋值同时进行,同时返回真实的String值)
  403. * @Attention: 保证传入的数据是字符串,且不能为空(null),否则报异常,正常就返回一个正常的String类型的参数
  404. * @return String
  405. * @author ylx
  406. * @date 2017年12月26日 下午3:48:40
  407. */
  408. public static String checkNullAndAssignString(final Object obj){
  409. try {
  410. if (obj == null) {
  411. throw new NullPointerException();
  412. }
  413. String str=String.class.cast(obj);
  414. return str;
  415. } catch (Exception e) {
  416. if(e instanceof NullPointerException){
  417. throw new NullPointerException("对象为null");
  418. }
  419. if(e instanceof ClassCastException){
  420. throw new ClassCastException("强转String类型异常");
  421. }
  422. throw new RuntimeException();
  423. }
  424. }
  425. /**
  426. * @Title: checkEmptyAndAssignString
  427. * @Target: 针对空(null)和空字符串("")
  428. * @Description: TODO(针对传入的参数进行非空(null)和空字符串("")校验并返回string数据类型--->只针对String类型,校验和赋值同时进行,同时返回真实的String值)
  429. * @Attention: 保证传入的数据是字符串,且不能为空(null)和空字符串(""),否则报异常,正常就返回一个正常的String类型的参数
  430. * @return String
  431. * @author ylx
  432. * @date 2017年12月26日 下午3:48:40
  433. */
  434. public static String checkEmptyAndAssignString(final Object obj){
  435. try {
  436. if (obj == null) {
  437. throw new NullPointerException();
  438. }
  439. String str=String.class.cast(obj);
  440. if("".equals(str)){
  441. throw new RuntimeException("字符串不能为空");
  442. }
  443. return str;
  444. } catch (Exception e) {
  445. if(e instanceof NullPointerException){
  446. throw new NullPointerException("对象为null");
  447. }
  448. if(e instanceof ClassCastException){
  449. throw new ClassCastException("强转String类型异常");
  450. }
  451. throw new RuntimeException(e.getMessage());
  452. }
  453. }
  454. /**
  455. * @Title: checkBlankAndAssignString
  456. * @target: 针对空(null)和空字符串("")和空内容的字符串(" ")
  457. * @Description: TODO(针对传入的参数进行非空(null)和空字符串("")和空内容的字符串(" ")校验并返回string数据类型--->只针对String类型,校验和赋值同时进行,同时返回真实的String值)
  458. * @Attention: 保证传入的数据是字符串,且不能为空(null)和空字符串("")和空内容的字符串(" "),否则报异常,正常就返回一个正常的String类型的参数
  459. * @return String
  460. * @author ylx
  461. * @date 2017年12月26日 下午3:48:40
  462. */
  463. public static String checkBlankAndAssignString(final Object obj){
  464. try {
  465. if (obj == null) {
  466. throw new NullPointerException();
  467. }
  468. String str=String.class.cast(obj);
  469. if("".equals(str.trim())){
  470. throw new RuntimeException("字符串不能无任何内容");
  471. }
  472. return str;
  473. } catch (Exception e) {
  474. if(e instanceof NullPointerException){
  475. throw new NullPointerException("对象为null");
  476. }
  477. if(e instanceof ClassCastException){
  478. throw new ClassCastException("强转String类型异常");
  479. }
  480. throw new RuntimeException(e.getMessage());
  481. }
  482. }
  483. /**
  484. * @Title: checkBlankStringAndAssignNullIfIsBlank
  485. * @Description: TODO(针对传入的Object类型参数进行非空(null)和空字符串("")和空内容的字符串(" ")校验并返回string数据类型,只要是null,""或" "全部返回null,不会抛出异常,除非无法强转为String,其它情况正常转String)
  486. * @Attention: 默认返回null
  487. * @return String
  488. * @author ylx
  489. * @date 2017年12月26日 下午3:48:40
  490. */
  491. public static String checkBlankStringAndAssignNullIfIsBlank(final Object obj){
  492. try {
  493. if (obj == null) {
  494. return null;
  495. }
  496. String str=String.class.cast(obj);
  497. if("".equals(str.trim())){
  498. return null;
  499. }
  500. return str;
  501. } catch (Exception e) {
  502. throw new RuntimeException("String类型转换异常");
  503. }
  504. }
  505. /**
  506. * @Title: checkBlankStringAndAssignEmptyIfIsBlank
  507. * @Description: TODO(针对传入的参数进行非空(null)和空字符串("")和空内容的字符串(" ")校验并返回string数据类型,只要是null,""或" "全部返回""空串,不会抛出异常,除非无法强转为String,其它情况正常转String)
  508. * @Attention: 默认返回""
  509. * @return String
  510. * @author ylx
  511. * @date 2017年12月26日 下午3:48:40
  512. */
  513. public static String checkBlankStringAndAssignEmptyIfIsBlank(final Object obj){
  514. try {
  515. if (obj == null) {
  516. return "";
  517. }
  518. String str=String.class.cast(obj);
  519. if("".equals(str.trim())){
  520. return "";
  521. }
  522. return str;
  523. } catch (Exception e) {
  524. throw new RuntimeException("String类型转换异常");
  525. }
  526. }
  527. /**
  528. *
  529. * @Title: checkAndAssignDefaultInt
  530. * @Description: TODO(如果校验的Object不能转换Integer则抛出异常,如果是null,空字符串或者是长空串,统一返回用户指定的默认值defaultInt)
  531. * @Attention: obj为null,空字符串""或者是长空串" "都不会抛异常,而是直接返回默认值
  532. * @return int 返回类型
  533. * @author ylx
  534. * @date 2017年12月27日 下午1:51:43
  535. */
  536. public static int checkAndAssignDefaultInt(final Object obj,int defaultInt){
  537. String number = null;
  538. try {
  539. if (obj == null) {
  540. return defaultInt;
  541. }
  542. number = String.class.cast(obj);
  543. if("".equals(number.trim())){
  544. return defaultInt;
  545. }
  546. try {
  547. return Integer.parseInt(number);
  548. } catch (NumberFormatException e) {
  549. throw new NumberFormatException();
  550. }
  551. } catch (Exception e) {
  552. if (e instanceof NumberFormatException) {
  553. throw new RuntimeException("数据类型解析异常");
  554. }
  555. Integer num = null;
  556. try {
  557. num = Integer.class.cast(obj);
  558. } catch (Exception e1) {
  559. throw new RuntimeException("Integer强转异常");
  560. }
  561. return num;
  562. }
  563. }
  564. /**
  565. *
  566. * @Title: checkAndAssignDefaultLong
  567. * @Description: TODO(如果校验的Object不能转换Long则抛出异常,如果是null,空字符串或者是长空串,统一返回用户指定的默认值defaultLong)
  568. * @Attention: obj为null,空字符串""或者是长空串" "都不会抛异常,而是直接返回默认值
  569. * @Solved: 这里要特别注意下,Long.class.cast(obj)当obj是Integer时会出现异常,包装类不能像基本类型一样强转,所以这里改成num=Long.parseLong(""+obj);
  570. * @return long 返回类型
  571. * @author ylx
  572. * @date 2017年12月27日 下午1:51:43
  573. */
  574. public static long checkAndAssignDefaultLong(final Object obj,long defaultLong){
  575. String number = null;
  576. try {
  577. if (obj == null) {
  578. return defaultLong;
  579. }
  580. number = String.class.cast(obj);
  581. if("".equals(number.trim())){
  582. return defaultLong;
  583. }
  584. try {
  585. return Long.parseLong(number);
  586. } catch (NumberFormatException e) {
  587. throw new NumberFormatException();
  588. }
  589. } catch (Exception e) {
  590. if (e instanceof NumberFormatException) {
  591. throw new RuntimeException("数据类型解析异常");
  592. }
  593. Long num = null;
  594. try {
  595. num=Long.parseLong(""+obj);
  596. } catch (Exception e1) {
  597. throw new RuntimeException("Long解析异常");
  598. }
  599. return num;
  600. }
  601. }
  602. /*public static void main(String[] args) {
  603. String json="{'KEY1':'12','KEY2':23,'KEY3':null}";
  604. Map parseObject = JSON.parseObject(json, Map.class);
  605. Object obj=20000000;
  606. long checkAndAssignDefaultLong = checkAndAssignDefaultLong(obj,1000);
  607. System.out.println(checkAndAssignDefaultLong);
  608. // Long.class.cast(obj
  609. // Long cast = Long.class.cast(1L);
  610. // System.out.println(checkAndAssignDefaultLong);
  611. }*/
  612. }