Skip to content

Commit 969fb1d

Browse files
authored
[app-builder] configurable input length (#534)
1 parent 72eca5c commit 969fb1d

File tree

3 files changed

+47
-7
lines changed

3 files changed

+47
-7
lines changed

app-builder/plugins/aipp-plugin/src/main/java/modelengine/fit/jober/aipp/dto/AppInputParam.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public static AppInputParam from(Map<String, Object> rawParam) {
6969
.isRequired(cast(rawParam.getOrDefault("isRequired", true)))
7070
.isVisible(cast(rawParam.getOrDefault("isVisible", true)))
7171
.stringMaxLength(appearance.getStringMaxLength())
72-
.validator(createValidator(appearance, type))
72+
.validator(createValidator(appearance, type, rawParam))
7373
.build();
7474
}
7575

@@ -105,11 +105,11 @@ public void validate(Map<String, Object> dataMap) {
105105
/**
106106
* 根据外观配置创建校验器
107107
*/
108-
private static Predicate<Object> createValidator(AppearanceConfig config, String type) {
108+
private static Predicate<Object> createValidator(AppearanceConfig config, String type, Map<String, Object> rawParam) {
109109
String displayType = config.getDisplayType();
110110

111111
if (displayType == null) {
112-
return createDefaultValidator(type);
112+
return createDefaultValidator(type, rawParam);
113113
}
114114

115115
return switch (displayType) {
@@ -118,7 +118,7 @@ private static Predicate<Object> createValidator(AppearanceConfig config, String
118118
case "dropdown" -> createDropdownValidator(config.getOptions());
119119
case "switch" -> createBooleanValidator();
120120
case "multiselect" -> createArrayValidator(config.getOptions());
121-
default -> createDefaultValidator(type);
121+
default -> createDefaultValidator(type, rawParam);
122122
};
123123
}
124124

@@ -182,7 +182,7 @@ private static Predicate<Object> createBooleanValidator() {
182182
return value -> value instanceof Boolean;
183183
}
184184

185-
private static Predicate<Object> createDefaultValidator(String type) {
185+
private static Predicate<Object> createDefaultValidator(String type, Map<String, Object> rawParam) {
186186
if (type == null) {
187187
return value -> false; // 如果类型未定义,则校验失败
188188
}
@@ -192,7 +192,11 @@ private static Predicate<Object> createDefaultValidator(String type) {
192192
if (!(value instanceof String str)) {
193193
return false;
194194
}
195-
return lengthBetween(str, 1, DEFAULT_STRING_MAX_LENGTH, true, true);
195+
return lengthBetween(str,
196+
1,
197+
cast(rawParam.getOrDefault("stringMaxLength", DEFAULT_STRING_MAX_LENGTH)),
198+
true,
199+
true);
196200
};
197201

198202
case "integer"-> value -> {

app-builder/plugins/aipp-plugin/src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ app-engine:
5959
question:
6060
max-length: 20000
6161
user-context:
62-
max-length: 500
62+
max-length: 5000
6363
plugin:
6464
system-creator: 'system'
6565
chat-path:

app-builder/plugins/aipp-plugin/src/test/java/modelengine/fit/jober/aipp/dto/AppInputParamTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,42 @@ void shouldFailForNullType() {
753753
// When & Then
754754
assertThrows(AippParamException.class, () -> param.validate(dataMap));
755755
}
756+
757+
@Test
758+
@DisplayName("string 类型长度超限异常")
759+
void shouldReturnFalseWhenValidateStringParamGivenStringOverLimit() {
760+
// Given
761+
Map<String, Object> rawParam = new HashMap<>();
762+
rawParam.put("name", "stringParam");
763+
rawParam.put("type", "String");
764+
rawParam.put("isRequired", true);
765+
rawParam.put("stringMaxLength", 5);
766+
767+
AppInputParam param = AppInputParam.from(rawParam);
768+
769+
// When & Then
770+
Map<String, Object> data = new HashMap<>();
771+
data.put("stringParam", "123456");
772+
assertThrows(AippParamException.class, () -> param.validate(data));
773+
}
774+
775+
@Test
776+
@DisplayName("string 类型长度正常范围内")
777+
void shouldReturnTrueWhenValidateStringParamGivenStringInLimit() {
778+
// Given
779+
Map<String, Object> rawParam = new HashMap<>();
780+
rawParam.put("name", "stringParam");
781+
rawParam.put("type", "String");
782+
rawParam.put("isRequired", true);
783+
rawParam.put("stringMaxLength", 5);
784+
785+
AppInputParam param = AppInputParam.from(rawParam);
786+
Map<String, Object> data = new HashMap<>();
787+
data.put("stringParam", "123");
788+
789+
// When & Then
790+
assertDoesNotThrow(() -> param.validate(data));
791+
}
756792
}
757793
}
758794

0 commit comments

Comments
 (0)