gpt4 book ai didi

java - 在 Spring boot 2 @Service 及其使用的业务对象/POJO 中使用区域设置(从网页或 REST 服务已知)的方法是什么?

转载 作者:行者123 更新时间:2023-11-30 05:51:44 26 4
gpt4 key购买 nike

我有一个常见问题。最终用户要么使用网页,要么调用 REST Web 服务。 Controller 知道他的区域设置:比方说:fr_FR。然后 Controller 调用服务并使用业务对象,但这些对象默认为另一个区域设置,因为它们不知道 Controller 接收到的区域设置。

在我的示例中,一位不聪明的顾客要求木匠从椅子上拆下背板。椅子作为一个现代商业对象,能够自动检查其状态,并最终会不满意:

在网站上,客户询问:“Monsieur le menuisier, sciez-moi donc cela, sur cette chaise。” (fr)

调用来自CarpenterService(在Spring上由@Service注释的类)的方法。它想要在完成工作的同时发出警告。

public void doTheJob(Chair chair) {
...
deliveryNote.warn(ResourceBundle.getBundle(..).getString("beware"));
// it warns : "Dear customer, it seems to me that you are doing a mistake." (en)
// instead of : "Cher client, il me semble que vous faites une bêtise." (fr)
...
if (chair.autocheck() == false) {
deliveryNote.warn(chair.complain());
// It warns : "I am not a chair but a stool : I have no chair back." (en)
// instead of : "Je ne suis pas une chaise mais un tabouret : je n'ai pas de dossier."
}
...
}

REST 或 Web Controller 知道区域设置 fr_FR。但默认为 en_US@Service 或 POJO 则不然。

我知道确保在任何层使用相同区域设置的唯一方法是将其带入木匠服务方法中的参数中,并创建一个也在 POJO 中接收区域设置的方法。但说实话,这很笨拙......

现在有没有更好的方法来处理此类问题,使用 Spring boot 2 ?

非常感谢,

最佳答案

您可以在 @Service 类中使用 LocaleContextHolder 来检索区域设置

此类的 Spring 文档:

Simple holder class that associates a LocaleContext instance with the current thread. The LocaleContext will be inherited by any child threads spawned by the current thread if the inheritable flag is set to true. Used as a central holder for the current Locale in Spring, wherever necessary: for example, in MessageSourceAccessor. DispatcherServlet automatically exposes its current Locale here. Other applications can expose theirs too, to make classes like MessageSourceAccessor automatically use that Locale.

所以在你的例子中

public void doTheJob(Chair chair) {
Locale locale = LocaleContextHolder.getLocale();
deliveryNote.warn(ResourceBundle.getBundle("baseName", locale).getString("beware"));
...
}

关于java - 在 Spring boot 2 @Service 及其使用的业务对象/POJO 中使用区域设置(从网页或 REST 服务已知)的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com