为了进行研究,我编写了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:
答案 0 :(得分:2)
您不能将JSON转换为接口-您需要创建一个类,即两端都需要该类。
为数据对象使用接口确实没有意义。将数据/模型类放在接口工件中,而不是为它们使用接口-不太可能需要模型类的两种不同实现。
关于不要在界面工件中使用与存储相关的注释,您说对了,这感觉像是糟糕的设计。我的方法是现在涉及两种不同的模型:
我将使它们成为两组不同的类,在接口工件中共享REST API模型,并将存储模型/ DTO保留在数据库工件中。