java - 验证对象字段可以在不使用循环的情况下更新 (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中是否有某种机制,我可以简单地将一个汽车对象映射到另一个汽车对象并返回允许/不允许的响应?理想情况下,如果是这种情况,请详细说明为什么不允许这样做。
感谢任何聪明的想法。
解决方案
好吧,如果您已经知道哪些 Car 属性是可编辑的,则可以将它们作为枚举值存储在EnumSet
.
然后,当更新请求到达时,您创建另一个EnumSet
并用用户想要更新的字段填充它。要检查是否允许操作,只需调用EnumSet#containsAll
以查看请求的字段是否在允许集中。
更好的方法是使用映射框架,例如 Orika Mapper 或 MapStruct。然后,您可以实现尝试将带有更新请求的 DTO 映射到您的 Car 类的方法,并在不允许此类映射时抛出异常。
推荐阅读
- java - Gradle 测试运行失败
- android - 检测运行失败。未找到测试
- java - 无法在 macOS 上使用 tomcat 部署应用程序:org.springframework.web.context.ContextLoader.initWebApplicationContext 上下文初始化失败
- python - 为什么我在 Windows 10 的 VSCode 中收到 (ModuleNotFoundError: No module named 'ModuleName') 错误?
- c# - 是否可以在 c# 中使用 VS Shortcut 作为事件
- r - 是什么决定了ggplot“标准化父坐标”中的父级?
- node.js - 使用弹性转码器修改分辨率后如何获取 s3 视频对象的大小?
- c# - 如何在没有等待响应的情况下通过单个 TCP 连接发送多个请求?C#
- asp.net - 如何在 IISExpress 中将 ASP.NET Core Web 应用程序作为子应用程序托管到 .NET Framework 应用程序
- wordpress - 加载我的数据库的帖子表中的额外元字段