首页 > 解决方案 > JCommander 验证列表项

问题描述

我正在使用 JCommander v. 1.72,我的目标是在参数中获取(逗号分隔的)字符串列表并验证单个字符串。听起来很简单,对吧?

这是我的代码:

@Parameter(names = { "-sort", "-s" }, validateWith = ParameterValidatorHeader.class)
private List<String> sort = new ArrayList<String>();

我用这个命令运行程序:

-sort column1,column2

我希望 JCommander 会在拆分单个项目调用验证器,即验证“column1”,验证“column2”。但显然字符串“column1,column2”在拆分参数值之前被发送到验证器类。

我怎样才能实现对单个项目的验证呢?(当然,在用 JCommander 解析它们之后,我可以用纯 Java 进行验证......)

谢谢埃里希

标签: validationlistitemjcommander

解决方案


您不能,至少不使用 JCommander,文档对此非常清楚

4.2 全局参数验证

使用 JCommander 解析参数后,您可能希望对这些参数执行额外的验证,例如确保两个互斥的参数没有同时指定。由于此类验证涉及所有潜在的组合,JCommander 不提供任何基于注释的解决方案来执行此验证,因为这种方法必然会受到 Java 注释的本质的限制。相反,您应该简单地在 Java 中对 JCommander 刚刚解析的所有参数执行此验证。


推荐阅读