В весенней загрузке 1.5.9,
Я хочу поддерживать оба, Accept-Header
и ?lang=
для переключения локали.
Вот как я настроил:
@Configuration
public class WebMvcConfigurerAdapterConfig extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
AcceptHeaderLocaleResolver acceptHeaderLocaleResolver = new AcceptHeaderLocaleResolver() {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String locale = request.getParameter("lang");
return locale != null
? org.springframework.util.StringUtils.parseLocaleString(locale)
: super.resolveLocale(request);
}
};
acceptHeaderLocaleResolver.setDefaultLocale(webMvcProperties.getLocale());
return acceptHeaderLocaleResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
Он отлично работает для заголовка accept, но когда я устанавливаю ?lang=fr
, я получаю:
UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy
Это было взято из ответа здесь: { ссылка }
Я также пытался использовать другой ответ (перед редактированием) с:
@Bean
public AcceptHeaderLocaleResolver localeResolver(WebMvcProperties mvcProperties) {
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver() {
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
LocaleContextHolder.setLocale(locale);
}
};
localeResolver.setDefaultLocale(mvcProperties.getLocale());
return localeResolver;
}
Но эта причина имеет два разных значения для локали в моем @Controller
, когда я добавляю ?lang=fr
:
public ModelAndView index (Locale locale) { // en-US
Locale localeFromContext = LocaleContextHolder.getLocale(); // fr
}
Как я могу поддерживать как заголовок, так и параметр для установки локали?