Skip to content

Commit bcb4f86

Browse files
committed
[fit] 修改校验处理插值器,提供默认地区设置功能
1 parent 53f1c3e commit bcb4f86

File tree

9 files changed

+82
-205
lines changed

9 files changed

+82
-205
lines changed

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-jakarta/src/main/java/modelengine/fitframework/validation/LocaleContextMessageInterpolator.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,62 @@
2626
public class LocaleContextMessageInterpolator implements MessageInterpolator {
2727
private final MessageInterpolator targetInterpolator;
2828

29+
private Locale locale;
30+
2931
/**
3032
* 构造函数。
3133
*
3234
* @param targetInterpolator 表示目标检验消息处理对象的 {@link MessageInterpolator}。
3335
*/
3436
public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator) {
3537
this.targetInterpolator = targetInterpolator;
38+
this.locale = Locale.getDefault();
3639
}
3740

3841
/**
3942
* 构造函数,默认使用 {@link ParameterMessageInterpolator} 作为目标检验消息处理对象。
4043
*/
4144
public LocaleContextMessageInterpolator() {
4245
this.targetInterpolator = new ParameterMessageInterpolator();
46+
this.locale = Locale.getDefault();
47+
}
48+
49+
/**
50+
* 构造函数。
51+
*
52+
* @param locale 表示当前设置默认的 {@link Locale}。
53+
*/
54+
public LocaleContextMessageInterpolator(Locale locale) {
55+
this.targetInterpolator = new ParameterMessageInterpolator();
56+
this.locale = locale;
57+
}
58+
59+
/**
60+
* 构造函数。
61+
*
62+
* @param targetInterpolator 表示目标检验消息处理对象的 {@link MessageInterpolator}。
63+
* @param locale 表示当前设置默认的 {@link Locale}。
64+
*/
65+
public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator, Locale locale) {
66+
this.targetInterpolator = targetInterpolator;
67+
this.locale = locale;
68+
}
69+
70+
/**
71+
* 设置默认的 {@link Locale}。
72+
*
73+
* @param locale 默认设置的 {@link Locale}。
74+
*/
75+
public void setLocale(Locale locale) {
76+
this.locale = locale;
4377
}
4478

4579
@Override
4680
public String interpolate(String messageTemplate, Context context) {
47-
return this.targetInterpolator.interpolate(messageTemplate, context, LocaleContextHolder.getLocale());
81+
if (LocaleContextHolder.getLocale() != null) {
82+
return this.targetInterpolator.interpolate(messageTemplate, context, LocaleContextHolder.getLocale());
83+
}
84+
return this.targetInterpolator.interpolate(messageTemplate, context, this.locale);
4885
}
4986

5087
@Override

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-jakarta/src/main/java/modelengine/fitframework/validation/LocaleMessageInterpolator.java

Lines changed: 0 additions & 86 deletions
This file was deleted.

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-jakarta/src/main/java/modelengine/fitframework/validation/ValidationHandler.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import jakarta.validation.ConstraintViolation;
1010
import jakarta.validation.ConstraintViolationException;
11-
import jakarta.validation.MessageInterpolator;
1211
import jakarta.validation.Validation;
1312
import jakarta.validation.Validator;
1413
import jakarta.validation.ValidatorFactory;
@@ -44,7 +43,7 @@
4443
public class ValidationHandler implements AutoCloseable {
4544
private final ValidatorFactory validatorFactory;
4645
private final Validator validator;
47-
private MessageInterpolator messageInterpolator;
46+
private LocaleContextMessageInterpolator messageInterpolator;
4847

4948
public ValidationHandler() {
5049
this.messageInterpolator = new LocaleContextMessageInterpolator();
@@ -62,18 +61,7 @@ public ValidationHandler() {
6261
* @param locale 表示校验语言的 {@link Locale}。
6362
*/
6463
public void setLocale(Locale locale) {
65-
if (this.messageInterpolator instanceof LocaleMessageInterpolator) {
66-
((LocaleMessageInterpolator) this.messageInterpolator).setLocale(locale);
67-
}
68-
}
69-
70-
/**
71-
* 设置校验信息消息插值器。
72-
*
73-
* @param messageInterpolator 表示校验信息消息插值器的 {@link MessageInterpolator}。
74-
*/
75-
public void setMessageInterpolator(MessageInterpolator messageInterpolator) {
76-
this.messageInterpolator = messageInterpolator;
64+
this.messageInterpolator.setLocale(locale);
7765
}
7866

7967
/**

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-jakarta/src/test/java/modelengine/fitframework/validation/ValidationHandlerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public class ValidationHandlerTest {
5858

5959
@BeforeEach
6060
void setUp() {
61-
this.handler.setMessageInterpolator(new LocaleMessageInterpolator());
6261
this.handler.setLocale(Locale.CHINA);
6362
when(this.validated.value()).thenReturn(new Class[0]);
6463
when(this.fitRuntime.resolverOfAnnotations()).thenReturn(this.annotationMetadataResolver);

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-javax/src/main/java/modelengine/fitframework/validation/LocaleContextMessageInterpolator.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,62 @@
2626
public class LocaleContextMessageInterpolator implements MessageInterpolator {
2727
private final MessageInterpolator targetInterpolator;
2828

29+
private Locale locale;
30+
2931
/**
3032
* 构造函数。
3133
*
3234
* @param targetInterpolator 表示目标检验消息处理对象的 {@link MessageInterpolator}。
3335
*/
3436
public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator) {
3537
this.targetInterpolator = targetInterpolator;
38+
this.locale = Locale.getDefault();
3639
}
3740

3841
/**
3942
* 构造函数,默认使用 {@link ParameterMessageInterpolator} 作为目标检验消息处理对象。
4043
*/
4144
public LocaleContextMessageInterpolator() {
4245
this.targetInterpolator = new ParameterMessageInterpolator();
46+
this.locale = Locale.getDefault();
47+
}
48+
49+
/**
50+
* 构造函数。
51+
*
52+
* @param locale 表示当前设置默认的 {@link Locale}。
53+
*/
54+
public LocaleContextMessageInterpolator(Locale locale) {
55+
this.targetInterpolator = new ParameterMessageInterpolator();
56+
this.locale = locale;
57+
}
58+
59+
/**
60+
* 构造函数。
61+
*
62+
* @param targetInterpolator 表示目标检验消息处理对象的 {@link MessageInterpolator}。
63+
* @param locale 表示当前设置默认的 {@link Locale}。
64+
*/
65+
public LocaleContextMessageInterpolator(MessageInterpolator targetInterpolator, Locale locale) {
66+
this.targetInterpolator = targetInterpolator;
67+
this.locale = locale;
68+
}
69+
70+
/**
71+
* 设置默认的 {@link Locale}。
72+
*
73+
* @param locale 默认设置的 {@link Locale}。
74+
*/
75+
public void setLocale(Locale locale) {
76+
this.locale = locale;
4377
}
4478

4579
@Override
4680
public String interpolate(String messageTemplate, Context context) {
47-
return this.targetInterpolator.interpolate(messageTemplate, context, LocaleContextHolder.getLocale());
81+
if (LocaleContextHolder.getLocale() != null) {
82+
return this.targetInterpolator.interpolate(messageTemplate, context, LocaleContextHolder.getLocale());
83+
}
84+
return this.targetInterpolator.interpolate(messageTemplate, context, this.locale);
4885
}
4986

5087
@Override

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-javax/src/main/java/modelengine/fitframework/validation/LocaleMessageInterpolator.java

Lines changed: 0 additions & 86 deletions
This file was deleted.

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-javax/src/main/java/modelengine/fitframework/validation/ValidationHandler.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
public class ValidationHandler implements AutoCloseable {
4646
private final ValidatorFactory validatorFactory;
4747
private final Validator validator;
48-
private MessageInterpolator messageInterpolator;
48+
private LocaleContextMessageInterpolator messageInterpolator;
4949

5050
public ValidationHandler() {
5151
this.messageInterpolator = new LocaleContextMessageInterpolator();
@@ -63,18 +63,7 @@ public ValidationHandler() {
6363
* @param locale 表示校验语言的 {@link Locale}。
6464
*/
6565
public void setLocale(Locale locale) {
66-
if (this.messageInterpolator instanceof LocaleMessageInterpolator) {
67-
((LocaleMessageInterpolator) this.messageInterpolator).setLocale(locale);
68-
}
69-
}
70-
71-
/**
72-
* 设置校验信息消息插值器。
73-
*
74-
* @param messageInterpolator 表示校验信息消息插值器的 {@link MessageInterpolator}。
75-
*/
76-
public void setMessageInterpolator(MessageInterpolator messageInterpolator) {
77-
this.messageInterpolator = messageInterpolator;
66+
this.messageInterpolator.setLocale(locale);
7867
}
7968

8069
/**

framework/fit/java/fit-builtin/plugins/fit-validation-hibernate-javax/src/test/java/modelengine/fitframework/validation/ValidationHandlerTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ public class ValidationHandlerTest {
5959

6060
@BeforeEach
6161
void setUp() {
62-
this.handler.setMessageInterpolator(new LocaleMessageInterpolator());
63-
this.handler.setLocale(Locale.ENGLISH);
62+
this.handler.setLocale(Locale.CHINA);
6463
when(this.validated.value()).thenReturn(new Class[0]);
6564
when(this.fitRuntime.resolverOfAnnotations()).thenReturn(annotationMetadataResolver);
6665
when(this.beanContainer.runtime()).thenReturn(fitRuntime);

framework/fit/java/fit-util/src/main/java/modelengine/fitframework/util/LocaleContextHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static LocaleContext getLocaleContext() {
4242
*/
4343
public static Locale getLocale() {
4444
LocaleContext context = getLocaleContext();
45-
return context != null ? context.getLocale() : Locale.getDefault();
45+
return context != null ? context.getLocale() : null;
4646
}
4747

4848
/**

0 commit comments

Comments
 (0)