
本文介绍如何在 Java Builder 模式中,使用 Apache Commons Lang 的 StringUtils.isNotBlank() 安全地为 apr 和 aprType 字段赋值:仅当请求参数非空时更新,否则保留原实体值。
本文介绍如何在 java builder 模式中,使用 apache commons lang 的 `stringutils.isnotblank()` 安全地为 `apr` 和 `aprtype` 字段赋值:仅当请求参数非空时更新,否则保留原实体值。
在使用不可变对象或 Builder 模式构建实体时,常需实现“有则覆盖、无则保留”的字段更新逻辑。直接在链式调用中嵌入 if 语句不可行(因 return 后无法执行多语句),此时应采用三元运算符(? :)结合字符串判空工具完成条件赋值。
首先,确保项目已引入 Apache Commons Lang 3(推荐版本 3.12.0+):
Gradle 配置(build.gradle):
dependencies {
implementation 'org.apache.commons:commons-lang3:3.12.0'
}
同步依赖后,在类中导入并改造 constructApplicationEntity 方法:
import org.apache.commons.lang3.StringUtils;
public WfccApplicationEntity constructApplicationEntity(
UpdateWfccApplicationDecisionRequest request,
WfccApplicationEntity entity) {
return entity.toBuilder()
.statusCode(request.getStatusCode())
.caseNumber(request.getCaseNumber())
.updatedBy(request.getUpdatedBy())
.apr(StringUtils.isNotBlank(request.getApr())
? request.getApr()
: entity.getApr())
.aprType(StringUtils.isNotBlank(request.getAprType())
? request.getAprType()
: entity.getAprType())
.statusCodeUpdatedDate(now())
.customerId(request.getCustomerId())
.build(); // 注意:.statusCodeUpdatedDate(now()) 出现两次,已去重
}
✅ 关键说明:
- StringUtils.isNotBlank() 同时校验 null、空字符串("")和纯空白字符(如 " "),比 != null && !"".equals() 更健壮;
- 使用 entity.getApr() 作为 fallback 值,确保字段不被意外清空;
- 注意避免重复调用 .statusCodeUpdatedDate(now())(原代码中出现两次),应仅保留一次;
- 若 apr 或 aprType 类型为数值或枚举,需改用对应判空逻辑(如 Objects.nonNull() 或 Optional),本例默认其为 String 类型。
该方案兼顾可读性、安全性与函数式风格,是 Builder 模式中处理可选字段更新的推荐实践。











