В рамках недавнего проекта, над которым я работал, у нас было требование иметь возможность изменять язык ответа с наших конечных точек без необходимости фактического изменения базового языка браузера.
Благодаря некоторой магии Spring, для достижения этой цели я расширил абстрактный класс HandlerInterceptorAdapter , чтобы он позволял мне обрабатывать любые входящие запросы.
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // set request locale here return true; }
Из переопределения предварительной обработки я взял параметр запроса locale и установил значение set the locale on LocaleResolver к тому, что взято из параметра запроса.
Код выглядит примерно так:
Locale localeFromRequest = RequestContextUtils.getLocale(request); String queryParameterLocale = request.getParameter("locale"); if (queryParameterLocale != null) { localeFromRequest = StringUtils.parseLocaleString(queryParameterLocale); } // set the new locale LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); localeResolver.setLocale(request, response, localeFromRequest);
Наконец, чтобы активировать недавно добавленный адаптер Interceptor, вам необходимо добавить его в свою конфигурацию Web Mvc . Смотрите Пример ниже, в моем случае я назвал свой запрос перехватчика LocaleInterceptor.
@Configuration public class WebMvcConfiguration extends WebMvcConfigurerAdapter { @Autowired private RequestLocaleInterceptor requestLocaleInterceptor; /** * {@inheritDoc} */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(requestLocaleInterceptor).addPathPatterns("/**"); } }
С этого момента любые вызовы REST автоматически наследуют параметр запроса locale, который задает контекст locale.
Например: получить
Оригинал: “https://dev.to/dougd/adding-spring-boot-rest-locale-query-param-1ijf”