首页 > 解决方案 > 验证对象字段可以在不使用循环的情况下更新 (Java)

问题描述

我希望能够验证我可以更新类中所有请求的字段,而无需在循环或类似机制中逐个循环它们。这是用例:

我有一门课有几十个领域。在这几十个字段中,只允许更新一个子集(在相应的持久数据对象中,该类映射到数据存储中)。此外,可更新的可能会随着时间而改变。为此,可更新字段在 application.properties 文件中作为单个属性捕获,该属性捕获为类的逗号分隔字段(String、int 等)。

例如,假设我有一堂课:

public class Car {
    String wheel;
    String engine;
    String transmission;
    String color;
}

,以及 application.properties 中的一个属性:

    car.editable=car.wheel,car.color

在运行时,我将读取汽车类属性,大概会读入相应的 Car 对象,该对象简单地指示(在此时间点)只有车轮和颜色是可编辑的。同时,我有一个用户调用我的端点(假设我有一个 updateCar 端点),他的汽车请求对象想要更新所有内容(车轮、发动机、变速箱、颜色)。

我想避免遍历类中的每个字段。java中是否有某种机制,我可以简单地将一个汽车对象映射到另一个汽车对象并返回允许/不允许的响应?理想情况下,如果是这种情况,请详细说明为什么不允许这样做。

感谢任何聪明的想法。

标签: java

解决方案


好吧,如果您已经知道哪些 Car 属性是可编辑的,则可以将它们作为枚举值存储在EnumSet.

然后,当更新请求到达时,您创建另一个EnumSet并用用户想要更新的字段填充它。要检查是否允许操作,只需调用EnumSet#containsAll以查看请求的字段是否在允许集中。

更好的方法是使用映射框架,例如 Orika Mapper 或 MapStruct。然后,您可以实现尝试将带有更新请求的 DTO 映射到您的 Car 类的方法,并在不允许此类映射时抛出异常。


推荐阅读