接口中的Pojos

时间:2018-06-21 07:12:13

标签: java json xml dependency-injection jersey

为了进行研究,我编写了songWebservice,这是一种利用Jersey部署的REST服务,已部署在Tomcat中。该数据库是本地json文件。 dataService有一个接口ISongDB,并与依赖项注入和抽象绑定器一起使用。很好。

现在(下一个任务)将songWebService进行改进,并将本地json替换为外部数据库。

为避免复制接口,导入无用的实现或将其全部放入一个项目中,我将接口移到了一个独立的项目中,该项目在pom.xml中引用。所以现在我有两个项目,如下:

-songWebServiceInterface
  -src.main...songWebService
    - web
      - ISongWebService                             [ Song getSong(id); int postSong(song) ]
      - AbstractSongWebService impl ISongWebService [ protected ISongDB;]
    - database
      - ISongDB                                     [ Song getSong(id); int postSong(song) ]
      - Abstract impl ISongDB                       [ protected abstract void init() ]
    - pojo ???


-songWebServiceFileDB
  -src.main...songWebService
    - web
      - SongWebService extends AbstractSongWebService      
    - database
      - FileSongDB extends AbstractSongDB                
    - pojo ???

我的问题是pojos(Song)。

首先在interface-project中,我使用了一个接口ISong,其中包含所有属性的getter和setter。在fileDB项目中,我放置了Song的{​​{1}}实现。直到进行对象映射之前感觉都很好。我无法在ISong中转换json或xml并以ISong的形式通过网络传递,或者无法接收json或xml并以Song的形式传递到我的文件中。

我真的认为这可行,但是我没有找到如何映射接口的提示。当然,我将ISong绑定到Song,但是缺少其他内容。请为我提供一个模式和/或示例。

一种变通方法是将ISong直接放在没有接口的接口项目中。它可以工作,但是确实很丑陋-现在我需要在接口项目中定义数据库相关的注释和映射/编组相关的注释,实际上不是我想要的(也许我想在不同的实现中使用不同的数据库结构) )。 我曾考虑过在实现中使用反射来“按代码”添加批注,但是我认为这不是应该这样做的方式。

我真的确定有一个通用的模式,但是我迷路了。

我在哪里以及如何实现目标的pojo:

  • 在界面中使用它们来定义方法
  • 在实现中使用注释和自定义逻辑自定义它们?

1 个答案:

答案 0 :(得分:2)

您不能将JSON转换为接口-您需要创建一个类,即两端都需要该类。

为数据对象使用接口确实没有意义。将数据/模型类放在接口工件中,而不是为它们使用接口-不太可能需要模型类的两种不同实现。

关于不要在界面工件中使用与存储相关的注释,您说对了,这感觉像是糟糕的设计。我的方法是现在涉及两种不同的模型:

  • 用于JSON通讯的模型
  • 数据存储模型

我将使它们成为两组不同的类,在接口工件中共享REST API模型,并将存储模型/ DTO保留在数据库工件中。