有什么好方法来确定记录上除一个字段之外的所有字段是否为空?

问题描述 投票:0回答:1

我有一条记录,用于通过 json/Jackson 发出更新请求:

public record UpdateRequest(
    Optional<String> field1,
    Optional<LocalDate> field2,
    Optional<@Max(24) Integer> field3,
    ...
    Optional<String> specialField) {}

如果实体被标记为

closed
specialField
除外),我想防止发生更新。它始终可以用于更新实体。

虽然实体是

closed
,但我想允许更新请求,例如:

{
  "specialField": "newValue"
}

但是要防止这样的情况:

{
  "field1": "newValue"
}

我正在努力想出一个好的解决方案来检查是否可以应用更新。这就是我所拥有的:

public boolean isUpdateValid(Entity entity, UpdateRequest updateRequest) {
  return !entity.isClosed() 
      || (updateRequest.field1().isEmpty()
          && updateRequest.field2().isEmpty()
          && updateRequest.field3().isEmpty());
}

但这很容易出错,因为当新字段添加到

isUpdateValid
时,没有人会更新
UpdateRequest
。有没有人有关于更好的方法来构建它的建议,以便随着
UpdateRequest
的变化更易于维护?

java data-modeling
1个回答
0
投票

我想出了以下解决方案,可能有点笨拙,但应该可行。

public boolean isUpdateValid(Entity entity, UpdateRequest updateRequest) {
  return !entity.isClosed() || new UpdateRequest(Optional.empty(), Optional.empty(), ..., updateRequest.specialField()).equals(updateRequest);
}

这应该可以工作,因为记录已经生成了

equals
方法,但如果您在记录中覆盖它,则不会工作。

© www.soinside.com 2019 - 2024. All rights reserved.