
本文介绍如何在 Java 构建器链式调用中,使用 Apache Commons Lang 的 StringUtils.isNotBlank() 对 apr 和 aprType 字段进行空值校验与条件赋值,避免覆盖原有有效值。
本文介绍如何在 java 构建器链式调用中,使用 apache commons lang 的 `stringutils.isnotblank()` 对 `apr` 和 `aprtype` 字段进行空值校验与条件赋值,避免覆盖原有有效值。
在使用 Lombok 或自定义 Builder 模式构建对象时,常需对入参字段做“非空才更新”的逻辑处理。直接在 return 语句中嵌入 if 语句不可行,但可通过三元运算符(? :)优雅实现条件赋值。
首先,确保项目已引入 Apache Commons Lang3 库。若使用 Gradle,在 build.gradle 中添加:
dependencies {
implementation 'org.apache.commons:commons-lang3:3.12.0'
}执行 Gradle Sync 后即可使用 StringUtils.isNotBlank() —— 该方法能同时判断 null、空字符串("")和仅含空白字符(如 " ")的情况,比 != null && !"".equals(str) 更健壮。
改造后的 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 被重复调用,此处已去重
}✅ 关键要点说明:
- 使用 StringUtils.isNotBlank() 替代手动判空,语义清晰、逻辑安全;
- 三元表达式确保:仅当请求参数非空时才更新字段,否则保留实体原有值;
- 注意避免重复设置同一字段(如原代码中 .statusCodeUpdatedDate(now()) 出现两次),应只保留一次;
- 若 entity.getApr() 或 entity.getAprType() 可能为 null,且业务要求空值时设为空字符串,可进一步调整为 ... ? request.getXXX() : Optional.ofNullable(entity.getXXX()).orElse("")。
该方案兼顾可读性、健壮性与函数式风格,是构建器模式中处理可选更新字段的推荐实践。

















