gpt4 book ai didi

java - 验证输入字段时忽略空值

转载 作者:行者123 更新时间:2023-12-01 17:54:50 26 4
gpt4 key购买 nike

我有一个包含以下元素的类:

public class Details {
private String locale;
private String url;
.
.
.
}

现在我从我的客户那里收到了一份列表。我想对这些元素进行一些验证。但是,不必所有元素都存在(可接受 null)。

List<Details> detailsList;

Validate.notNull(detailsList);
for(Details details: detailsList) {
if(details.getLocale() != null) {
Validate.isTrue(StringUtils.isNotBlank(LocaleUtils.toLocale(details.getLocale()).getVariant()));
}
if(details.getUrl() != null) {
Validate.isTrue(urlValidator.isValid(details.getUrl()));
}
//Similarly perform null checks and then do the validation.
}

是否有更好的方法来编写此验证而不是为每个字段编写空检查?

最佳答案

只是为了拿Locale您的代码示例,我的理解是:

  • 可接受空值
  • 但如果它不为空,那么它必须是有效的 Locale有一个变体

这使得“无效”成为您的验证标准的一部分,因此您可以简单地在前面添加 == null || <valid>表达。例如:

Validate.isTrue(details.getLocale() == null || StringUtils.isNotBlank(...));

使用新的 Java 8 Optional<> class 还有更多语法选择,可以明确您的意图。下面的代码说明了这一点。选择您的偏好。

import org.apache.commons.lang3.*;

public class OptionalTest {

public static class TestObject1 {
String locale;
public TestObject1(String locale) {
this.locale = locale;
}
}

public static class TestObject2 {
Optional<String> locale;
public TestObject2(String locale) {
this.locale = Optional.ofNullable(locale);
}
}

public static void main(String[] args) {
validate1(new TestObject1("en_GB_EURO"));
validate1(new TestObject1(null));

validate2(new TestObject2("en_GB_EURO"));
validate2(new TestObject2(null));

validate3(new TestObject2("en_GB_EURO"));
validate3(new TestObject2(null));
}

private static void validate1(TestObject1 to) {
Validate.isTrue(to.locale == null || StringUtils.isNotBlank(LocaleUtils.toLocale(to.locale).getVariant()));
}

private static void validate2(TestObject2 to) {
Validate.isTrue(!to.locale.isPresent() || StringUtils.isNotBlank(LocaleUtils.toLocale(to.locale.get()).getVariant()));
}

private static void validate3(TestObject2 to) {
to.locale.ifPresent(loc -> {
Validate.isTrue(StringUtils.isNotBlank(LocaleUtils.toLocale(loc).getVariant()));
});
}
}

关于java - 验证输入字段时忽略空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com