|
5 | 5 |
|
6 | 6 | package apijson; |
7 | 7 |
|
8 | | -import java.util.List; |
9 | | -import java.util.Set; |
10 | | -import java.util.StringTokenizer; |
11 | | - |
12 | 8 | import com.alibaba.fastjson.JSONArray; |
13 | 9 | import com.alibaba.fastjson.JSONObject; |
14 | 10 |
|
| 11 | +import java.util.List; |
| 12 | +import java.util.Set; |
| 13 | + |
15 | 14 | /**parser for response |
16 | 15 | * @author Lemon |
17 | 16 | * @see #getObject |
|
23 | 22 | public class JSONResponse extends apijson.JSONObject { |
24 | 23 | private static final long serialVersionUID = 1L; |
25 | 24 |
|
| 25 | + // 节约性能和减少 bug,除了关键词 @key ,一般都符合变量命名规范,不符合也原样返回便于调试 |
| 26 | + /**格式化带 - 中横线的单词 |
| 27 | + */ |
| 28 | + public static boolean IS_FORMAT_HYPHEN = false; |
| 29 | + /**格式化带 _ 下划线的单词 |
| 30 | + */ |
| 31 | + public static boolean IS_FORMAT_UNDERLINE = false; |
| 32 | + /**格式化带 $ 美元符的单词 |
| 33 | + */ |
| 34 | + public static boolean IS_FORMAT_DOLLAR = false; |
| 35 | + |
26 | 36 | private static final String TAG = "JSONResponse"; |
27 | 37 |
|
28 | 38 | public JSONResponse() { |
@@ -206,10 +216,6 @@ public JSONResponse getJSONResponse(String key) { |
206 | 216 | //状态信息,非GET请求获得的信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
207 | 217 |
|
208 | 218 |
|
209 | | - |
210 | | - |
211 | | - |
212 | | - |
213 | 219 | /** |
214 | 220 | * key = clazz.getSimpleName() |
215 | 221 | * @param clazz |
@@ -408,18 +414,18 @@ public static String getTableName(String fullName) { |
408 | 414 |
|
409 | 415 | /**获取变量名 |
410 | 416 | * @param fullName |
411 | | - * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = true, formatAt = true, formatHyphen = true, firstCase = true |
| 417 | + * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean)} formatColon = true, formatAt = true, formatHyphen = true, firstCase = true |
412 | 418 | */ |
413 | 419 | public static String getVariableName(String fullName) { |
414 | 420 | if (isArrayKey(fullName)) { |
415 | 421 | fullName = StringUtil.addSuffix(fullName.substring(0, fullName.length() - 2), "list"); |
416 | 422 | } |
417 | | - return formatKey(fullName, true, true, true, true); |
| 423 | + return formatKey(fullName, true, true, true, true, false, true); |
418 | 424 | } |
419 | 425 |
|
420 | 426 | /**格式化数组的名称 key[] => keyList; key:alias[] => aliasList; Table-column[] => tableColumnList |
421 | 427 | * @param key empty ? "list" : key + "List" 且首字母小写 |
422 | | - * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = true, firstCase = true |
| 428 | + * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = true, firstCase = true |
423 | 429 | */ |
424 | 430 | public static String formatArrayKey(String key) { |
425 | 431 | if (isArrayKey(key)) { |
@@ -430,28 +436,29 @@ public static String formatArrayKey(String key) { |
430 | 436 | return key.substring(index + 1); //不处理自定义的 |
431 | 437 | } |
432 | 438 |
|
433 | | - return formatKey(key, false, true, true, true); //节约性能,除了数组对象 Table-column:alias[] ,一般都符合变量命名规范 |
| 439 | + return formatKey(key, false, true, true, IS_FORMAT_UNDERLINE, IS_FORMAT_DOLLAR, false); //节约性能,除了数组对象 Table-column:alias[] ,一般都符合变量命名规范 |
434 | 440 | } |
435 | 441 |
|
436 | 442 | /**格式化对象的名称 name => name; name:alias => alias |
437 | 443 | * @param key name 或 name:alias |
438 | | - * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = false, firstCase = true |
| 444 | + * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = false, firstCase = true |
439 | 445 | */ |
440 | 446 | public static String formatObjectKey(String key) { |
441 | 447 | int index = key == null ? -1 : key.indexOf(":"); |
442 | 448 | if (index >= 0) { |
443 | | - return key.substring(index + 1); //不处理自定义的 |
| 449 | + return key.substring(index + 1); // 不处理自定义的 |
444 | 450 | } |
445 | 451 |
|
446 | | - return formatKey(key, false, true, false, true); //节约性能,除了表对象 Table:alias ,一般都符合变量命名规范 |
| 452 | + return formatKey(key, false, true, IS_FORMAT_HYPHEN, IS_FORMAT_UNDERLINE, IS_FORMAT_DOLLAR, false); //节约性能,除了表对象 Table:alias ,一般都符合变量命名规范 |
447 | 453 | } |
448 | 454 |
|
449 | 455 | /**格式化普通值的名称 name => name; name:alias => alias |
450 | 456 | * @param fullName name 或 name:alias |
451 | | - * @return {@link #formatKey(String, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = false, firstCase = false |
| 457 | + * @return {@link #formatKey(String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean)} formatColon = false, formatAt = true, formatHyphen = false, firstCase = false |
452 | 458 | */ |
453 | 459 | public static String formatOtherKey(String fullName) { |
454 | | - return formatKey(fullName, false, true, false, false); //节约性能,除了关键词 @key ,一般都符合变量命名规范,不符合也原样返回便于调试 |
| 460 | + return formatKey(fullName, false, true, IS_FORMAT_HYPHEN, IS_FORMAT_UNDERLINE, IS_FORMAT_DOLLAR |
| 461 | + , IS_FORMAT_HYPHEN || IS_FORMAT_UNDERLINE || IS_FORMAT_DOLLAR ? false : null); |
455 | 462 | } |
456 | 463 |
|
457 | 464 |
|
@@ -460,10 +467,13 @@ public static String formatOtherKey(String fullName) { |
460 | 467 | * @param formatAt 去除前缀 @ , @a => a |
461 | 468 | * @param formatColon 去除分隔符 : , A:b => b |
462 | 469 | * @param formatHyphen 去除分隔符 - , A-b-cd-Efg => aBCdEfg |
| 470 | + * @param formatUnderline 去除分隔符 _ , A_b_cd_Efg => aBCdEfg |
| 471 | + * @param formatDollar 去除分隔符 $ , A$b$cd$Efg => aBCdEfg |
463 | 472 | * @param firstCase 第一个单词首字母小写,后面的首字母大写, Ab => ab ; A-b-Cd => aBCd |
464 | 473 | * @return name => name; name:alias => alias |
465 | 474 | */ |
466 | | - public static String formatKey(String fullName, boolean formatColon, boolean formatAt, boolean formatHyphen, boolean firstCase) { |
| 475 | + public static String formatKey(String fullName, boolean formatColon, boolean formatAt, boolean formatHyphen |
| 476 | + , boolean formatUnderline, boolean formatDollar, Boolean firstCase) { |
467 | 477 | if (fullName == null) { |
468 | 478 | Log.w(TAG, "formatKey fullName == null >> return null;"); |
469 | 479 | return null; |
@@ -476,10 +486,17 @@ public static String formatKey(String fullName, boolean formatColon, boolean for |
476 | 486 | fullName = formatAt(fullName); |
477 | 487 | } |
478 | 488 | if (formatHyphen) { |
479 | | - fullName = formatHyphen(fullName, firstCase); |
| 489 | + fullName = formatHyphen(fullName, firstCase != null); |
| 490 | + } |
| 491 | + if (formatUnderline) { |
| 492 | + fullName = formatUnderline(fullName, firstCase != null); |
| 493 | + } |
| 494 | + if (formatDollar) { |
| 495 | + fullName = formatDollar(fullName, firstCase != null); |
480 | 496 | } |
481 | 497 |
|
482 | | - return firstCase ? StringUtil.firstCase(fullName) : fullName; //不格式化普通 key:value (value 不为 [], {}) 的 key |
| 498 | + // 默认不格式化普通 key:value (value 不为 [], {}) 的 key |
| 499 | + return firstCase == null ? fullName : StringUtil.firstCase(fullName, firstCase); |
483 | 500 | } |
484 | 501 |
|
485 | 502 | /**"@key" => "key" |
@@ -489,6 +506,7 @@ public static String formatKey(String fullName, boolean formatColon, boolean for |
489 | 506 | public static String formatAt(@NotNull String key) { |
490 | 507 | return key.startsWith("@") ? key.substring(1) : key; |
491 | 508 | } |
| 509 | + |
492 | 510 | /**key:alias => alias |
493 | 511 | * @param key |
494 | 512 | * @return |
@@ -502,15 +520,60 @@ public static String formatColon(@NotNull String key) { |
502 | 520 | * @param key |
503 | 521 | * @return |
504 | 522 | */ |
505 | | - public static String formatHyphen(@NotNull String key, boolean firstCase) { |
506 | | - String name = ""; |
| 523 | + public static String formatHyphen(@NotNull String key, Boolean firstCase) { |
| 524 | + return formatDivider(key, "-", firstCase); |
| 525 | + } |
| 526 | + |
| 527 | + /**A_b_cd_Efg => ABCdEfg |
| 528 | + * @param key |
| 529 | + * @return |
| 530 | + */ |
| 531 | + public static String formatUnderline(@NotNull String key, Boolean firstCase) { |
| 532 | + return formatDivider(key, "_", firstCase); |
| 533 | + } |
507 | 534 |
|
508 | | - StringTokenizer parts = new StringTokenizer(key, "-"); |
509 | | - name += parts.nextToken(); |
510 | | - while(parts.hasMoreTokens()) { |
511 | | - String part = parts.nextToken(); |
512 | | - name += firstCase ? StringUtil.firstCase(part, true) : part; |
| 535 | + /**A$b$cd$Efg => ABCdEfg |
| 536 | + * @param key |
| 537 | + * @return |
| 538 | + */ |
| 539 | + public static String formatDollar(@NotNull String key, Boolean firstCase) { |
| 540 | + return formatDivider(key, "$", firstCase); |
| 541 | + } |
| 542 | + |
| 543 | + /**A.b.cd.Efg => ABCdEfg |
| 544 | + * @param key |
| 545 | + * @return |
| 546 | + */ |
| 547 | + public static String formatDot(@NotNull String key, Boolean firstCase) { |
| 548 | + return formatDivider(key, ".", firstCase); |
| 549 | + } |
| 550 | + |
| 551 | + /**A/b/cd/Efg => ABCdEfg |
| 552 | + * @param key |
| 553 | + * @return |
| 554 | + */ |
| 555 | + public static String formatDivider(@NotNull String key, Boolean firstCase) { |
| 556 | + return formatDivider(key, "/", firstCase); |
| 557 | + } |
| 558 | + |
| 559 | + /**去除分割符,返回驼峰格式 |
| 560 | + * @param key |
| 561 | + * @param divider |
| 562 | + * @param firstCase |
| 563 | + * @return |
| 564 | + */ |
| 565 | + public static String formatDivider(@NotNull String key, @NotNull String divider, Boolean firstCase) { |
| 566 | + String[] parts = StringUtil.split(key, divider); |
| 567 | + StringBuilder name = new StringBuilder(); |
| 568 | + for (String part : parts) { |
| 569 | + part = part.toLowerCase(); // 始终小写,也方便反过来 ABCdEfg -> A_b_cd_Efg |
| 570 | + if (firstCase != null) { |
| 571 | + // 始终小写, A_b_cd_Efg -> ABCdEfg, firstCase ? part.toLowerCase() : part.toUpperCase(); |
| 572 | + part = StringUtil.firstCase(part, firstCase); |
| 573 | + } |
| 574 | + name.append(part); |
513 | 575 | } |
514 | | - return name; |
| 576 | + return name.toString(); |
515 | 577 | } |
| 578 | + |
516 | 579 | } |