我有一个API,它将基类作为RequestBody。我说有3个实体(扩展BaseClass的A、B和C(和3个相应的JPA存储库。在@controller或@service类中,我如何知道RequestBody指的是哪个子类?我使用了@JsonTypeInfo和@JsonSubTypes注释来序列化和反序列化,所以这不是问题。
- 我想弄清楚@RequestBody对象的类型,例如,如果@RequestBody对象是A、B或C的实例
- 在这种情况下使用instanceof好吗
- 如果我使用instanceof,如果我以后想再添加50个实体,比如说再添加10个JPA存储库,那么我不可能继续为这些instanceof条件添加If/else。在这种情况下,最好的方法是什么
首先,是的,在这种情况下您可以使用的实例。然而,如果你再增加10个类,你不会乐意再添加10个if/then/else块。在这种情况下,我想到了两种方法:
- 访问者模式:当你有这种if的链式实例时,这正是你想要的模式(例如。https://refactoring.guru/design-patterns/visitor/java/example)
- 如果这是唯一一个你有这个的地方,如果访客可能会过度杀戮。您可以创建映射类->Lambda函数。在构造函数中初始化它,然后查找每个类所需的行为
- 您创建一个Map VO->实体然后,您可以查询实体的存储库的应用程序上下文