Написано в предыдущей статье: Долгое время статья в основном записывает фактические проблемы, столкнувшиеся в некоторых проектах и соответствующие решения. При анализе соответствующего кода он будет напрямую указывать на проблему и не будет публиковать нерелевантные коды процессов. Заинтересованные читатели могут отслеживать их сами. В то же время, я надеюсь, что каждый сможет поделиться своим опытом в области комментариев, чтобы каждый мог добиться успеха вместе!
Окружающая среда или версия: весна 3.2.3
Феномен: Spring Speakyource используется для обработки международного копирайтинга. Некоторые заполнители в копирайтинге в штате США не были заменены, что нормально в штате CN. Копирайтинг выглядит следующим образом:
tms.pallet.order.box.qty = Общее количество паллетизированных коробок {0} не совпадает с полученными коробками {1}, пожалуйста, дважды проверьте!
tms.pallet.order.box.qty = общее количество ящиков для посадки {0}, что несовместимо с общим количеством ящиков для получения заказа {1}. Проверьте, пожалуйста!
Интуиция: Английский копирайтинг слишком долго? Пружина ограничила длину при его обработке. Внимательно подумав об этом, весна не должна быть такой жалкой.
Устранение неполадок: точки останова.
// индексы для сегментов частное статическое окончательное окончательное значение int seg_raw = 0; Частный статический конечный int seg_index = 1; Частный статический финал int seg_type = 2; Private Static Final int seg_modifier = 3; // Модификатор или субформат/*** Устанавливает шаблон, используемый этим форматом сообщения. * Метод анализирует шаблон и создает список субформатов * для элементов формата, содержащихся в нем. * Паттерны и их интерпретация указаны в * <a href = "#patterns" rel = "внешний nofollow"> описание класса </a>. * * @param шаблон шаблон для этого формата сообщения * @exception allodalargumentException Если шаблон недействителен */ @suppresswarnings ("Fallough") // Ожидается падение в коммутаторе, подавляйте его общедоступную viodpattern (String Pattern) {StringBuilder [] segments = new StringBuilder [4]; // выделять только сегменты [seg_raw] здесь. Остальные // выделяются по требованию. сегменты [seg_raw] = new StringBuilder (); int part = seg_raw; int formatnumber = 0; логическое исследование = false; int bracestack = 0; maxoffset = -1; for (int i = 0; i <pattern.length (); ++ i) {char ch = pattern.charat (i); if (part == seg_raw) {if (ch == '/' ') {if (i + 1 <pattern.length () && pattern.charat (i + 1) =='/'') {segments [part] .append (ch); // Обработка удваиваний ++ I; } else {encoute =! incortote; }} else if (ch == '{' &&! incortote) {part = seg_index; if (segments [seg_index] == null) {segments [seg_index] = new StringBuilder (); }} else {segments [part] .append (ch); / if (ch == '/' ') {incord = false; }} else {switch (ch) {case ',': if (part <seg_modifier) {if (segments [++ part] == null) {segments [part] = new StringBuilder (); }} else {segments [part] .append (ch); } перерыв; case '{': ++ bracestack; сегменты [часть] .ppend (ch); перерыв; case '}': if (bracestack == 0) {part = seg_raw; Makeformat (i, formatnumber, сегменты); formatnumber ++; // Выбросить другие сегменты сегментов [seg_index] = null; сегменты [seg_type] = null; сегменты [seg_modifier] = null; } else { -bracestack; сегменты [часть] .ppend (ch); } перерыв; case '': // пропустить любые ведущие космические карты для seg_type. if (part! = seg_type || segments [seg_type] .length ()> 0) {segments [part] .append (ch); } перерыв; case '/' ': encuote = true; // провалиться, поэтому мы держим цитаты в других частях по умолчанию: сегменты [часть] .ppend (ch); перерыв; }}}}} if (bracestack == 0 && part! = 0) {maxoffset = -1; Бросьте новую allosalargumentException («непревзойденные брекеты в шаблоне»); } this.pattern = сегменты [0] .toString (); }Приведенный выше код немного сбивает с толку и немного странно. В основном мы смотрим на первую логическую ветвь: пересекайте символы в каждой ожидающей международной строке шаблона копирования. Когда персонаж «», определите, является ли следующий персонаж "" "". Если это так, сплайс "'" в обработанном строке. Если нет, Exprote это правда. Если символ не является '{', а Investote не является ложным, то сбросьте часть на 0, и если сегменты [seg_index] = null, воссоздайте объект StringBuilder, в противном случае продолжайте сплайсинг.
Анализ причины:
Решение:
Из исходного кода есть только одно решение. Одиночные кавычки между {} должны появиться в парах. Наш способ обработки - изменить копию на:
tms.pallet.order.box.qty = Общее количество паллетизированных ящиков {0} не совпадает с полученным Количеством {1}, пожалуйста, дважды проверьте!
Модификация копирайтинга напрямую не является хорошим решением. Лучше всего переписать метод, прежде чем пружина вызывает метод ApplyPattern, чтобы заменить отдельные кавычки на двойные кавычки. К сожалению, соответствующие международные методы обработки весной 3.2.3 являются частными, и они не дают вам возможности переписать.
После консультации с соответствующей информацией вы можете обнаружить, что в версии весны 4.3.2 вы можете переписать метод GetStringorNull в классе ResourceBundlemessagesource для его достижения.
Долгосрочное решение: обновите весеннюю версию в проекте и используйте больше новых функций.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.