首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从外部API播放模型对象

从外部API播放模型对象
EN

Stack Overflow用户
提问于 2013-05-27 20:44:43
回答 4查看 471关注 0票数 14

我在使用Java的Play 2 Framework v.2.1.1中是新的,我正在寻找在不重复代码的情况下完成以下操作的最佳方法。

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

这个API的对象与Play 2 Model对象完全相同。但是我不想复制api对象来添加Play、validations和其他注释。

是否有任何方法可以使用配置文件添加这类行为?例如,我在考虑一些类似Hibernate hbm的东西。

例如:

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

代码语言:javascript
运行
复制
public class Entity{
    public String field1;
    public String field2;
}

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

代码语言:javascript
运行
复制
public class Entity1{

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

    @Required
    @NonEmpty
    public String field2;
}

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

代码语言:javascript
运行
复制
<class name="Entity1">
    <property name="field1" >
        <required/>
        <nonEmpty/>
        <minLength value="3"/>
    </property>
    <property name="field2" >
        <required/>
        <nonEmpty/>
    </property>
</class>

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

谢谢

EN

回答 4

Stack Overflow用户

发布于 2014-09-24 22:34:15

我看不出在像XML这样的非类型文件描述符中复制API模型比使用typesafe语言更好。此外,我不想将我的模型和应用程序从我控制的API中耦合到一个模型中。

我认为在Java/Scala中复制模型并使用简单的bean复印机(如dozer )在两者之间移动要好得多。

票数 1
EN

Stack Overflow用户

发布于 2013-08-02 10:54:25

一个问题是ebean作为持久性提供者--在ebean中,没有办法将bean持久性配置具体化,因为hibernate ( 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到注释的映射是直接的。这将是一个很好的开源项目。

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

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 10:26:42

我不清楚为什么不能在自己的应用程序中添加注释,但是如果您有这样的约束,为什么不直接扩展类、重写变量、添加注释并将其用作EBean模型呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16780338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档