如何在 Spring WebFlux 中获取语言环境?
How to get locale in Spring WebFlux?
我想获取当前语言环境,但上下文总是 return 默认语言环境。它适用于 MVC,但不适用于 WebFlux。
感谢您的帮助!
package co.example.demo.controller;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Locale;
@RestController
@RequestMapping("/hello")
public class HelloController {
private final MessageSource messageSource;
public HelloController(MessageSource messageSource) {
this.messageSource = messageSource;
}
@GetMapping
public String hello() {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage("hello", null, locale);
}
}
不要在 WebFlux 环境中使用 LocaleContextHolder
,而是添加 Locale
作为方法参数:
@RestController
public class LocaleController {
@GetMapping("/locale")
String getLocale(Locale locale) {
return locale.toLanguageTag();
}
}
测试:
$ curl localhost:8080/locale -H 'Accept-Language: en-US'
en-US
$ curl localhost:8080/locale -H 'Accept-Language: en-GB'
en-GB
有关详细信息,请参阅:
早些时候我在我的项目中使用 spring-web 依赖项,并且能够从 WebRequest 获取语言环境。
但是当我们将项目从 spring-web 迁移到 spring-web-flux 时,我们可以使用 LocaleContextHolder 获取语言环境,如下所示:
Locale locale = LocaleContextHolder.getLocale();
我想获取当前语言环境,但上下文总是 return 默认语言环境。它适用于 MVC,但不适用于 WebFlux。
感谢您的帮助!
package co.example.demo.controller;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Locale;
@RestController
@RequestMapping("/hello")
public class HelloController {
private final MessageSource messageSource;
public HelloController(MessageSource messageSource) {
this.messageSource = messageSource;
}
@GetMapping
public String hello() {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage("hello", null, locale);
}
}
不要在 WebFlux 环境中使用 LocaleContextHolder
,而是添加 Locale
作为方法参数:
@RestController
public class LocaleController {
@GetMapping("/locale")
String getLocale(Locale locale) {
return locale.toLanguageTag();
}
}
测试:
$ curl localhost:8080/locale -H 'Accept-Language: en-US'
en-US
$ curl localhost:8080/locale -H 'Accept-Language: en-GB'
en-GB
有关详细信息,请参阅:
早些时候我在我的项目中使用 spring-web 依赖项,并且能够从 WebRequest 获取语言环境。
但是当我们将项目从 spring-web 迁移到 spring-web-flux 时,我们可以使用 LocaleContextHolder 获取语言环境,如下所示:
Locale locale = LocaleContextHolder.getLocale();