1. Введение
В этом учебнике мы узнаем, как форматировать валюты, используя Тимьян .
2. Мейвен зависимостей
Начнем с импорта Весенняя загрузка Thymeleaf зависимость :
org.springframework.boot spring-boot-starter-thymeleaf 2.2.7.RELEASE
3. Настройка проекта
Наш проект будет простой Весна веб-приложение, которое отображает валюты на основе локате пользователя. Давайте создадим наш шаблон Thymeleaf, валюты.html , в ресурсы/шаблоны/ :
Currency table
Мы также можем создать класс контроллера, который будет обрабатывать наши запросы:
@Controller
public class CurrenciesController {
@GetMapping(value = "/currency")
public String exchange(
@RequestParam(value = "amount") String amount, Locale locale) {
return "currencies/currencies";
}
}4. Форматирование
Когда дело доходит до валют, мы должны форматировать их на основе локате запрашиваемого.
В этом случае мы отправим Принять-язык заголовок с каждым запросом для представления локате нашего пользователя.
4.1. Валюта
Цифры класс, предоставляемый Thymeleaf, имеет поддержку для форматирования валют. Итак, давайте обновим наш взгляд с призывом к форматCurrency метод
Когда мы забудем наш пример, мы увидим, что валюта правильно отформатирована:
@Test
public void whenCallCurrencyWithUSALocale_ThenReturnProperCurrency() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/currency")
.header("Accept-Language", "en-US")
.param("amount", "10032.5"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("$10,032.50")));
}С тех пор, как мы установили Принять-Язык заголовок в Соединенные Штаты, валюта отформатирована с десятичной точкой и знак доллара.
4.2. Валютные массивы
Мы также можем использовать Цифры класс к формату массивов . В результате мы добавим еще один параметр запроса к нашему контроллеру:
@GetMapping(value = "/currency")
public String exchange(
@RequestParam(value = "amount") String amount,
@RequestParam(value = "amountList") List amountList, Locale locale) {
return "currencies/currencies";
}Далее мы можем обновить наше представление, чтобы включить вызов в списокФорматКуртная метод:
Теперь давайте посмотрим, как выглядит результат:
@Test
public void whenCallCurrencyWithUkLocaleWithArrays_ThenReturnLocaleCurrencies() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/currency")
.header("Accept-Language", "en-GB")
.param("amountList", "10", "20", "30"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("£10.00, £20.00, £30.00")));
}Результат показывает список валют с надлежащей форматирования Соединенного Королевства добавил.
4.3. Трейинг нулей
Использование Строки заменяют , мы можем удалить задние нули .
Теперь мы можем увидеть полную сумму, не отставая от двойных нулей:
@Test
public void whenCallCurrencyWithUSALocaleWithoutDecimal_ThenReturnCurrencyWithoutTrailingZeros()
throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/currency")
.header("Accept-Language", "en-US")
.param("amount", "10032"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("$10,032")));
}4.4. Десятиборья
В зависимости от места, десятиборья могут быть отформатированы по-разному. Поэтому, если мы хотим заменить десятичную точку запятой, мы можем использовать форматДекимальный метод, предоставляемый Цифры класс:
Давайте посмотрим результат в тесте:
@Test
public void whenCallCurrencyWithUSALocale_ThenReturnReplacedDecimalPoint() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/currency")
.header("Accept-Language", "en-US")
.param("amount", "1.5"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("1,5")));
}Значение будет отформатировано как “1,5”.
5. Заключение
В этом коротком учебнике мы показали, как Thymeleaf может быть использован с Spring Web для обработки валют с помощью локале пользователя.
Как всегда, код доступен более на GitHub .