Рубрики
Без рубрики

Добавление параметра запроса языкового стандарта Spring Boot Rest

Язык весеннего ботинка. С тегами spring, java, rest, locale.

В рамках недавнего проекта, над которым я работал, у нас было требование иметь возможность изменять язык ответа с наших конечных точек без необходимости фактического изменения базового языка браузера.

Благодаря некоторой магии 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”