Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

package modelengine.fitframework.validation;

import modelengine.fitframework.util.ObjectUtils;
import modelengine.fitframework.util.i18n.LocaleContextHolder;

import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
Expand All @@ -25,7 +26,6 @@
*/
public class LocaleContextMessageInterpolator implements MessageInterpolator {
private final MessageInterpolator targetInterpolator;

private Locale locale;

/**
Expand Down Expand Up @@ -53,7 +53,7 @@ public LocaleContextMessageInterpolator() {
*/
public LocaleContextMessageInterpolator(Locale locale) {
this.targetInterpolator = new ParameterMessageInterpolator();
this.locale = locale;
this.locale = ObjectUtils.getIfNull(locale, Locale::getDefault);
}

/**
Expand All @@ -64,7 +64,7 @@ public LocaleContextMessageInterpolator(Locale locale) {
*/
public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator, Locale locale) {
this.targetInterpolator = targetInterpolator;
this.locale = locale;
this.locale = ObjectUtils.getIfNull(locale, Locale::getDefault);
}

/**
Expand All @@ -73,7 +73,7 @@ public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator,
* @param locale 默认设置的 {@link Locale}。
*/
public void setLocale(Locale locale) {
this.locale = locale;
this.locale = ObjectUtils.getIfNull(locale, Locale::getDefault);
}

@Override
Expand All @@ -88,4 +88,4 @@ public String interpolate(String messageTemplate, Context context) {
public String interpolate(String messageTemplate, Context context, Locale locale) {
return this.targetInterpolator.interpolate(messageTemplate, context, locale);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
public class ValidationHandler implements AutoCloseable {
private final ValidatorFactory validatorFactory;
private final Validator validator;
private LocaleContextMessageInterpolator messageInterpolator;
private final LocaleContextMessageInterpolator messageInterpolator;

public ValidationHandler() {
this.messageInterpolator = new LocaleContextMessageInterpolator();
Expand Down Expand Up @@ -163,4 +163,4 @@ private boolean isJakartaConstraintAnnotation(Annotation annotation) {
return "jakarta.validation".equals(packageName) && "Constraint".equals(className);
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -755,4 +755,4 @@ void testRangeBigDecimalValidation() {
ConstraintViolationException exception = invokeHandleMethod(method, new Object[] {new BigDecimal("5.5")});
assertThat(exception.getMessage()).contains("需要在10和100之间");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

package modelengine.fitframework.validation;

import modelengine.fitframework.util.ObjectUtils;
import modelengine.fitframework.util.i18n.LocaleContextHolder;

import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
Expand All @@ -25,7 +26,6 @@
*/
public class LocaleContextMessageInterpolator implements MessageInterpolator {
private final MessageInterpolator targetInterpolator;

private Locale locale;

/**
Expand Down Expand Up @@ -53,7 +53,7 @@ public LocaleContextMessageInterpolator() {
*/
public LocaleContextMessageInterpolator(Locale locale) {
this.targetInterpolator = new ParameterMessageInterpolator();
this.locale = locale;
this.locale = ObjectUtils.getIfNull(locale, Locale::getDefault);
}

/**
Expand All @@ -64,7 +64,7 @@ public LocaleContextMessageInterpolator(Locale locale) {
*/
public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator, Locale locale) {
this.targetInterpolator = targetInterpolator;
this.locale = locale;
this.locale = ObjectUtils.getIfNull(locale, Locale::getDefault);
}

/**
Expand All @@ -73,7 +73,7 @@ public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator,
* @param locale 默认设置的 {@link Locale}。
*/
public void setLocale(Locale locale) {
this.locale = locale;
this.locale = ObjectUtils.getIfNull(locale, Locale::getDefault);
}

@Override
Expand All @@ -88,4 +88,4 @@ public String interpolate(String messageTemplate, Context context) {
public String interpolate(String messageTemplate, Context context, Locale locale) {
return this.targetInterpolator.interpolate(messageTemplate, context, locale);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
public class ValidationHandler implements AutoCloseable {
private final ValidatorFactory validatorFactory;
private final Validator validator;
private LocaleContextMessageInterpolator messageInterpolator;
private final LocaleContextMessageInterpolator messageInterpolator;

public ValidationHandler() {
this.messageInterpolator = new LocaleContextMessageInterpolator();
Expand Down Expand Up @@ -165,4 +165,4 @@ private boolean isJavaxConstraintAnnotation(Annotation annotation) {
return "javax.validation".equals(packageName) && "Constraint".equals(className);
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,12 @@ public class DefualtLocaleResolver implements LocaleResolver {
public Locale resolveLocale(HttpClassicServerRequest request) {
// 先解析 Cookie,如果没有则解析 Accept-Language 头。
String newLocale = request.cookies().get(this.cookieName).map(Cookie::value).orElse(null);
if (newLocale != null && StringUtils.isNotBlank(newLocale.trim())) {
if (StringUtils.isNotBlank(newLocale.trim())) {
return Locale.forLanguageTag(newLocale);
}
String acceptLanguage = null;
List<String> acceptLanguages = request.headers().all("Accept-Language");

for (String language : acceptLanguages) {
if (language != null && StringUtils.isNotBlank(language.trim())) {
acceptLanguage = language;
break;
}
}

if (acceptLanguage != null && StringUtils.isNotBlank(acceptLanguage.trim())) {
String acceptLanguage = request.headers().first("Accept-Language").orElse(null);
if (StringUtils.isNotBlank(acceptLanguage.trim())) {
return Locale.forLanguageTag(acceptLanguage);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@

import modelengine.fit.http.server.*;
import modelengine.fitframework.annotation.Scope;
import modelengine.fitframework.inspection.Validation;
import modelengine.fitframework.util.StringUtils;
import modelengine.fitframework.util.i18n.LocaleContextHolder;

import java.util.List;
import java.util.Locale;
import java.util.Optional;

/**
* 地区解析过滤器,使用 {@link LocaleResolver} 进行地区解析。
Expand All @@ -32,7 +34,7 @@ public class LocaleResolveFilter implements HttpServerFilter {
* @param localeResolver 表示地区解析器的 {@link LocaleResolver}。
*/
public LocaleResolveFilter(LocaleResolver localeResolver) {
this.localeResolver = localeResolver;
this.localeResolver = Validation.notNull(localeResolver, "The locale resolver cannot be null.");
}

/**
Expand Down Expand Up @@ -66,14 +68,7 @@ public List<String> mismatchPatterns() {
public void doFilter(HttpClassicServerRequest request, HttpClassicServerResponse response,
HttpServerFilterChain chain) throws DoHttpServerFilterException {
try {
List<String> paramLocales = request.queries().all("locale");
Locale responseLocale = null;
for (String paramLocale : paramLocales) {
if (paramLocale != null && StringUtils.isNotBlank(paramLocale.trim())) {
responseLocale = Locale.forLanguageTag(paramLocale);
break;
}
}
Locale responseLocale = Locale.forLanguageTag(this.resolveLocaleFromParam(request));
// 如果参数中带有地区,说明用户想使用新地区执行后续的操作,直接设置地区。
if (responseLocale != null) {
LocaleContextHolder.setLocale(responseLocale);
Expand All @@ -99,4 +94,9 @@ public void doFilter(HttpClassicServerRequest request, HttpClassicServerResponse
public Scope scope() {
return this.scope;
}

private String resolveLocaleFromParam(HttpClassicServerRequest request) {
Optional<String> paramLocale = request.queries().first("locale");
return paramLocale.orElse(null);
}
}
Loading