From 605599c1a1ed20c593df0803dacfe0edcd418e7e Mon Sep 17 00:00:00 2001 From: loveTsong <271667068@qq.com> Date: Mon, 3 Nov 2025 15:38:42 +0800 Subject: [PATCH] [app-builder] configurable input length --- .../fit/jober/aipp/dto/AppInputParam.java | 16 +++++---- .../src/main/resources/application.yml | 2 +- .../fit/jober/aipp/dto/AppInputParamTest.java | 36 +++++++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app-builder/plugins/aipp-plugin/src/main/java/modelengine/fit/jober/aipp/dto/AppInputParam.java b/app-builder/plugins/aipp-plugin/src/main/java/modelengine/fit/jober/aipp/dto/AppInputParam.java index 2515d76d9c..31a2929368 100644 --- a/app-builder/plugins/aipp-plugin/src/main/java/modelengine/fit/jober/aipp/dto/AppInputParam.java +++ b/app-builder/plugins/aipp-plugin/src/main/java/modelengine/fit/jober/aipp/dto/AppInputParam.java @@ -69,7 +69,7 @@ public static AppInputParam from(Map rawParam) { .isRequired(cast(rawParam.getOrDefault("isRequired", true))) .isVisible(cast(rawParam.getOrDefault("isVisible", true))) .stringMaxLength(appearance.getStringMaxLength()) - .validator(createValidator(appearance, type)) + .validator(createValidator(appearance, type, rawParam)) .build(); } @@ -105,11 +105,11 @@ public void validate(Map dataMap) { /** * 根据外观配置创建校验器 */ - private static Predicate createValidator(AppearanceConfig config, String type) { + private static Predicate createValidator(AppearanceConfig config, String type, Map rawParam) { String displayType = config.getDisplayType(); if (displayType == null) { - return createDefaultValidator(type); + return createDefaultValidator(type, rawParam); } return switch (displayType) { @@ -118,7 +118,7 @@ private static Predicate createValidator(AppearanceConfig config, String case "dropdown" -> createDropdownValidator(config.getOptions()); case "switch" -> createBooleanValidator(); case "multiselect" -> createArrayValidator(config.getOptions()); - default -> createDefaultValidator(type); + default -> createDefaultValidator(type, rawParam); }; } @@ -182,7 +182,7 @@ private static Predicate createBooleanValidator() { return value -> value instanceof Boolean; } - private static Predicate createDefaultValidator(String type) { + private static Predicate createDefaultValidator(String type, Map rawParam) { if (type == null) { return value -> false; // 如果类型未定义,则校验失败 } @@ -192,7 +192,11 @@ private static Predicate createDefaultValidator(String type) { if (!(value instanceof String str)) { return false; } - return lengthBetween(str, 1, DEFAULT_STRING_MAX_LENGTH, true, true); + return lengthBetween(str, + 1, + cast(rawParam.getOrDefault("stringMaxLength", DEFAULT_STRING_MAX_LENGTH)), + true, + true); }; case "integer"-> value -> { diff --git a/app-builder/plugins/aipp-plugin/src/main/resources/application.yml b/app-builder/plugins/aipp-plugin/src/main/resources/application.yml index ec97107868..89a21eeb13 100644 --- a/app-builder/plugins/aipp-plugin/src/main/resources/application.yml +++ b/app-builder/plugins/aipp-plugin/src/main/resources/application.yml @@ -59,7 +59,7 @@ app-engine: question: max-length: 20000 user-context: - max-length: 500 + max-length: 5000 plugin: system-creator: 'system' elsa: diff --git a/app-builder/plugins/aipp-plugin/src/test/java/modelengine/fit/jober/aipp/dto/AppInputParamTest.java b/app-builder/plugins/aipp-plugin/src/test/java/modelengine/fit/jober/aipp/dto/AppInputParamTest.java index fd68bf6243..2b26a98361 100644 --- a/app-builder/plugins/aipp-plugin/src/test/java/modelengine/fit/jober/aipp/dto/AppInputParamTest.java +++ b/app-builder/plugins/aipp-plugin/src/test/java/modelengine/fit/jober/aipp/dto/AppInputParamTest.java @@ -753,6 +753,42 @@ void shouldFailForNullType() { // When & Then assertThrows(AippParamException.class, () -> param.validate(dataMap)); } + + @Test + @DisplayName("string 类型长度超限异常") + void shouldReturnFalseWhenValidateStringParamGivenStringOverLimit() { + // Given + Map rawParam = new HashMap<>(); + rawParam.put("name", "stringParam"); + rawParam.put("type", "String"); + rawParam.put("isRequired", true); + rawParam.put("stringMaxLength", 5); + + AppInputParam param = AppInputParam.from(rawParam); + + // When & Then + Map data = new HashMap<>(); + data.put("stringParam", "123456"); + assertThrows(AippParamException.class, () -> param.validate(data)); + } + + @Test + @DisplayName("string 类型长度正常范围内") + void shouldReturnTrueWhenValidateStringParamGivenStringInLimit() { + // Given + Map rawParam = new HashMap<>(); + rawParam.put("name", "stringParam"); + rawParam.put("type", "String"); + rawParam.put("isRequired", true); + rawParam.put("stringMaxLength", 5); + + AppInputParam param = AppInputParam.from(rawParam); + Map data = new HashMap<>(); + data.put("stringParam", "123"); + + // When & Then + assertDoesNotThrow(() -> param.validate(data)); + } } }