Java如何实现参数校验:productId/productAltID空值或双日期必填规则
问题根因
你的校验逻辑存在两个核心问题:
- Java中
&&优先级高于||,你没有加括号明确判断分组,可读性极差且容易出现逻辑偏差。 - 缺漏了隐含的日期校验规则:
productSellDate和productReturnDate必须同时为空或者同时非空,如果两个日期一个为空一个非空,无论productId/productAltID是否有值,都属于非法场景,但你的现有逻辑没有对这种情况做校验,所以会返回错误结果。
比如你测试用例中的场景:
String productId = null; String productAltID = "adfafadsf"; Date productSellDate = null; Date productReturnDate = new Date();
两个日期一个空一个非空属于非法场景,但你的现有逻辑因为productAltID != null满足条件,会错误返回校验成功。
修正后的校验逻辑
我们可以把规则拆解为两个必须同时满足的判断条件:
- 两个日期必须同时为空,或者同时非空
- 满足你给出的规则:如果两个id都为空,那么两个日期必须都非空(和你给出的规则2、3逻辑等价)
修正后的完整代码如下:
public class validate { public static void main(String[] args) { String productId = null; String productAltID = "adfafadsf"; Date productSellDate = null; Date productReturnDate = new Date(); // 校验日期是否同空或者同非空 boolean isDateValid = (productSellDate == null && productReturnDate == null) || (productSellDate != null && productReturnDate != null); // 校验id和日期的组合规则 boolean isIdDateMatch = (productId != null || productAltID != null) || (productSellDate != null && productReturnDate != null); if (isDateValid && isIdDateMatch) { System.out.println("validation success"); } else { System.out.println("validation failed"); } } }
校验结果验证
你给出的4个合法场景都可以正常通过校验,所有非法场景(两个日期一有一无、id全空且日期不全有、日期全空且id全空)都会返回校验失败。
内容的提问来源于stack exchange,提问作者Dave Brady
相关产品推荐
相关产品推荐

