LocaleContextHolder не возвращает точный языковой стандарт в Spring Cloud Gateway - PullRequest
1 голос
/ 20 июня 2020

Есть ли способ получить текущую локаль в Spring Cloud Gateway? Я использую LocaleContextHolder.getLocale(), чтобы получить языковой стандарт пользователя, но он всегда возвращает языковой стандарт по умолчанию en. Спасибо за помощь!


@Component
public class ClientVersionGatewayFilterFactory extends AbstractGatewayFilterFactory<ClientVersionGatewayFilterFactory.Config> {
    private final MessageSource messageSource;

    public ClientVersionGatewayFilterFactory(MessageSource messageSource) {
        super(Config.class);
        this.messageSource = messageSource;
    }

    @Override
    public GatewayFilter apply(Config config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

                Locale locale = LocaleContextHolder.getLocale();
                String message = messageSource.getMessage("test", null, locale);

                exchange.getResponse().getHeaders().set("X-Custom-Locale", locale.getLanguage());
                exchange.getResponse().getHeaders().set("X-Custom-Test", message);

                return exchange.getResponse().setComplete();
            }
        };
    }

    public static class Config {
    }
}

1 Ответ

1 голос
/ 22 июня 2020

Я нашел способ обхода.

Locale locale = LocaleContextHolder.getLocale(exchange.getLocaleContext());
String message = messageSource.getMessage("test", null, locale);

Есть ли у кого-нибудь лучшие решения?

...