From b3c7f5e2c5a388a38df1c7445e2be7e9072b1241 Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Thu, 19 Oct 2023 12:33:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=92=8CErrorCode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/util/ServiceExceptionUtil.java | 3 ++- .../common/util/i18n}/MessageUtil.java | 11 +++++++--- .../web/config/WinWebAutoConfiguration.java | 21 +++++++++++++++++++ .../src/main/resources/application.yaml | 1 + 4 files changed, 32 insertions(+), 4 deletions(-) rename win-framework/{win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util => win-common/src/main/java/com/win/framework/common/util/i18n}/MessageUtil.java (61%) diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java index 7a0ecdee..e16f6543 100644 --- a/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java @@ -4,6 +4,7 @@ import com.win.framework.common.exception.ErrorCode; import com.win.framework.common.exception.ServiceException; import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; import com.google.common.annotations.VisibleForTesting; +import com.win.framework.common.util.i18n.MessageUtil; import lombok.extern.slf4j.Slf4j; import java.util.Map; @@ -77,7 +78,7 @@ public class ServiceExceptionUtil { } public static ServiceException exception0(Integer code, String messagePattern, Object... params) { - String message = doFormat(code, messagePattern, params); + String message = doFormat(code, MessageUtil.message(messagePattern), params); return new ServiceException(code, message); } diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/MessageUtil.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/i18n/MessageUtil.java similarity index 61% rename from win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/MessageUtil.java rename to win-framework/win-common/src/main/java/com/win/framework/common/util/i18n/MessageUtil.java index c2d1d054..c0684c5b 100644 --- a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/MessageUtil.java +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/i18n/MessageUtil.java @@ -1,13 +1,14 @@ -package com.win.framework.web.core.util; +package com.win.framework.common.util.i18n; import cn.hutool.extra.spring.SpringUtil; import org.springframework.context.MessageSource; +import org.springframework.context.NoSuchMessageException; import org.springframework.context.i18n.LocaleContextHolder; public class MessageUtil { /** - * 根据消息键和参数 获取消息 委托给spring messageSource + * 根据消息键和参数 获取消息 委托给spring messageSource,获取不到则返回code * * @param code 消息键 * @param args 参数 @@ -15,7 +16,11 @@ public class MessageUtil { */ public static String message(String code, Object... args) { MessageSource messageSource = SpringUtil.getBean(MessageSource.class); - return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + try { + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } catch (NoSuchMessageException ignored) { + return code; + } } } diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java index 27ff857f..4e32a26f 100644 --- a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java @@ -16,14 +16,18 @@ import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfigu import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.util.AntPathMatcher; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.*; +import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; import javax.annotation.Resource; import javax.servlet.Filter; @@ -46,6 +50,23 @@ public class WinWebAutoConfiguration implements WebMvcConfigurer { configurePathMatch(configurer, webProperties.getAdminApi()); } + /** + * 设置validator国际化 + * @param messageSource + * @return + */ + @Bean + public LocalValidatorFactoryBean defaultValidator(MessageSource messageSource) { + LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean(); + factoryBean.setValidationMessageSource(messageSource); + return factoryBean; + } + + @Bean + public LocaleResolver localeResolver() { + return new AcceptHeaderLocaleResolver(); + } + /** * 设置 API 前缀,仅仅匹配 controller 包下的 * diff --git a/win-server/src/main/resources/application.yaml b/win-server/src/main/resources/application.yaml index 41e4959d..1259540c 100644 --- a/win-server/src/main/resources/application.yaml +++ b/win-server/src/main/resources/application.yaml @@ -4,6 +4,7 @@ spring: # i18 message 配置,对应 MessageSourceProperties 配置类 messages: basename: i18n/bpm,i18n/infra,i18n/mes,i18n/report,i18n/scp,i18n/system,i18n/wms # 文件路径基础名 + encoding: UTF-8 profiles: include: druid