ErrorMessageUtil.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.nosum.common.util;
  2. import com.nosum.common.constant.Constants;
  3. import com.nosum.common.enums.SystemLanguageEnum;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.springframework.core.io.support.PropertiesLoaderUtils;
  6. import org.springframework.util.CollectionUtils;
  7. import java.nio.charset.Charset;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Properties;
  13. /**
  14. * @Description: 异常提示工具类
  15. * @Author: sumbytes
  16. * @Date: 2019/2/14 11:55
  17. */
  18. public class ErrorMessageUtil {
  19. /**
  20. * 根据错误提示码,获取对应错误提示信息(中文)
  21. * @param errorCode
  22. * @return
  23. */
  24. public static String getErrorMessage(String errorCode) {
  25. return ErrorMessage.getErrorMessage(errorCode, SystemLanguageEnum.ZH.getCode());
  26. }
  27. /**
  28. * 根据错误提示码、语言获取对应错误提示信息
  29. * 注意:language 传入空时,按照中文处理
  30. * @param errorCode
  31. * @param language
  32. * @return
  33. */
  34. public static String getErrorMessage(String errorCode, String language) {
  35. return ErrorMessage.getErrorMessage(errorCode, language);
  36. }
  37. /**
  38. * 内部类,用于初始化错误提示信息
  39. */
  40. private static final class ErrorMessage {
  41. private static final Map<String, Map<String, String>> ERROR_MESSAGE_MAP = new HashMap<>();
  42. static {
  43. try {
  44. // 初始化需要使用的编码
  45. Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
  46. Charset UTF_8 = Charset.forName("UTF-8");
  47. // 循环系统支持语言
  48. for (SystemLanguageEnum lang : SystemLanguageEnum.values()) {
  49. // 获取对应语言的资源文件路径
  50. List<String> resourcePathList = getResourcesPath(lang.getCode());
  51. // 初始化当前语言对应的提示信息容器
  52. Map<String, String> errorMessageMap = new HashMap<>();
  53. // 遍历循环资源文件,读取错误提示信息
  54. for (String resourcePath : resourcePathList) {
  55. Properties properties = PropertiesLoaderUtils.loadAllProperties(resourcePath);
  56. properties.forEach((key, value) -> {
  57. errorMessageMap.put(new String(((String) key).getBytes(ISO_8859_1), UTF_8), new String(((String) value).getBytes(ISO_8859_1), UTF_8));
  58. });
  59. }
  60. // 缓存当前语言对应的错误提示信息
  61. ERROR_MESSAGE_MAP.put(lang.getCode(), errorMessageMap);
  62. }
  63. } catch (Exception e) {
  64. }
  65. }
  66. /**
  67. * 获取内部错误提示信息
  68. * @param errorCode
  69. * @param language
  70. * @return
  71. */
  72. private static final String getErrorMessage(String errorCode, String language) {
  73. language = StringUtils.isBlank(language) ? SystemLanguageEnum.ZH.getCode() : language;
  74. Map<String, String> errorMessageMap = ERROR_MESSAGE_MAP.get(language);
  75. return CollectionUtils.isEmpty(errorMessageMap) ? null : errorMessageMap.get(errorCode);
  76. }
  77. /**
  78. * 根据规则获取错误提示资源文件路径
  79. * 注意:目前没有做外置化配置,亦不支持用户自定义;后续有需要则提供代码配置接口
  80. * @return
  81. */
  82. private static final List<String> getResourcesPath(String lang) {
  83. String[] parentPathArr = new String[]{"resource"};
  84. String[] fileNameArr = new String[]{"error-message"};
  85. String[] fileNameSuffixArr = new String[]{".properties"};
  86. List<String> resourcePath = new ArrayList<>();
  87. for (String path : parentPathArr) {
  88. for (String fileName : fileNameArr) {
  89. for (String suffix : fileNameSuffixArr) {
  90. resourcePath.add(path + Constants.PATH_SEPARATOR + fileName + "-" + lang + suffix);
  91. }
  92. }
  93. }
  94. return resourcePath;
  95. }
  96. }
  97. }