从外部API播放模型对象

Die*_*o D 14 java configuration-files playframework playframework-2.1

我是Play 2 Framework v.2.1.1中的新用Java和我正在寻找最好的方法来执行以下操作而不重复代码.

为了简化,我有一个使用外部API的Play 2后台.我不管理这个API,但我调用REST服务来执行api上的操作.

此API的对象与Play 2模型对象完全相同.但我不想复制api对象来添加Play验证和其他注释.

有没有办法使用配置文件添加此类行为?我正在考虑像Hibernate hbm这样的东西.

例如:

非托管api中的对象:(为简单起见,我省略了getter和setter)

public class Entity{
    public String field1;
    public String field2;
}
Run Code Online (Sandbox Code Playgroud)

我想避免的对象:(为简单起见,我省略了getter和setter)

public class Entity1{

    @Required
    @NonEmpty
    @MinLength(3)
    public String field1;

    @Required
    @NonEmpty
    public String field2;
}
Run Code Online (Sandbox Code Playgroud)

配置示例:(我需要这样的东西)

<class name="Entity1">
    <property name="field1" >
        <required/>
        <nonEmpty/>
        <minLength value="3"/>
    </property>
    <property name="field2" >
        <required/>
        <nonEmpty/>
    </property>
</class>
Run Code Online (Sandbox Code Playgroud)

使用注释似乎比使用xmls或任何其他配置文件更好,所以我不一定要使用配置文件,我愿意接受任何解决此问题的建议.

谢谢

Seb*_*tes 0

一个问题是 ebean 作为持久性提供者 - 在 ebean 中,无法像在 hibernate 中那样外部化 bean 持久性配置(sql 查询除外)。是否可以切换持久性提供者?游戏似乎允许这样做。

由于您写道您无法修改实体源代码并且您不想复制源代码,因此我看到的唯一其他可能性是字节码增强。

您需要的是一个允许您在 xml 文件中外部化注释的库。该库将使用检测 API,在 jvm 启动时读取 xml 文件并修改每个列出的类的字节码,以便在运行时向类和字段添加注释。

这种方法有两个问题:

  1. 没有这样的库(至少我找不到)
  2. Play 和 EBean 使用自己的代理/类加载器以允许热部署和持久化

第一个问题是简单有趣的部分,例如参见https://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation .html。使用 javaassist 可以轻松地向类和字段添加注释。从 xml 到注释的映射是直接的。这将是一个很好的开源项目。

第二个问题看起来更困难,因为您必须安装注释代理,以便它在播放和 ebean 开始解析注释之前执行。