From 273b21c267d3159cbdba2061671dd1c35f36177f Mon Sep 17 00:00:00 2001 From: camilesing Date: Wed, 16 Sep 2026 15:49:00 +0800 Subject: [PATCH] fix required bug --- .../cs/core/datatask/DataTaskParamBinder.java | 2 +- .../datatask/DataTaskParamBinderTest.java | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/datapoly-core/src/main/java/com/cs/core/datatask/DataTaskParamBinder.java b/datapoly-core/src/main/java/com/cs/core/datatask/DataTaskParamBinder.java index 323c140..83bc4b4 100644 --- a/datapoly-core/src/main/java/com/cs/core/datatask/DataTaskParamBinder.java +++ b/datapoly-core/src/main/java/com/cs/core/datatask/DataTaskParamBinder.java @@ -44,7 +44,7 @@ public static Map bind(List declarations, Map body, boolean isArray) { Object raw = body.get(decl.getName()); if (!isArray) { - return coerceOrNull(decl, raw, decl.getName(), true); + return coerceOrNull(decl, raw, decl.getName(), Boolean.TRUE.equals(decl.getRequired())); } List values = raw instanceof List ? (List) raw : null; if (null == values || values.isEmpty()) { diff --git a/datapoly-core/src/test/java/com/cs/core/datatask/DataTaskParamBinderTest.java b/datapoly-core/src/test/java/com/cs/core/datatask/DataTaskParamBinderTest.java index 7f56c13..0d4f1ba 100644 --- a/datapoly-core/src/test/java/com/cs/core/datatask/DataTaskParamBinderTest.java +++ b/datapoly-core/src/test/java/com/cs/core/datatask/DataTaskParamBinderTest.java @@ -57,6 +57,40 @@ public void missingRequiredThrowsCommonException() { } } + @Test + public void requiredScalarWithBlankValueIsStillMissing() { + Map body = new HashMap<>(); + body.put("name", " "); + + try { + DataTaskParamBinder.bind( + Collections.singletonList(simple("name", ParamTypeEnum.STRING, false, true, null)), body); + Assert.fail("expected CommonException"); + } catch (CommonException e) { + Assert.assertEquals(ResponseErrorCode.ERROR_INVALID_ARGUMENT, e.getCode()); + } + } + + @Test + public void optionalScalarWithBlankValueIsOmittedNotMissing() { + Map body = new HashMap<>(); + body.put("arrivalAtStart", ""); + + Map bound = DataTaskParamBinder.bind( + Collections.singletonList(simple("arrivalAtStart", ParamTypeEnum.STRING, false, false, null)), body); + + Assert.assertTrue("optional blank scalar must not be reported missing", bound.isEmpty()); + } + + @Test + public void optionalScalarAbsentIsOmitted() { + Map bound = DataTaskParamBinder.bind( + Collections.singletonList(simple("arrivalAtStart", ParamTypeEnum.STRING, false, false, null)), + Collections.emptyMap()); + + Assert.assertTrue(bound.isEmpty()); + } + @Test public void defaultValueAppliesWhenAbsent() { Map bound = DataTaskParamBinder.bind(