Java:JPA/JSON/REST 往返工作流程

标签 java json rest jpa mapping

我正在寻找一个java“工作流程”,它执行以下操作:

  1. 从数据库中获取对象
  2. 序列化为json
  3. 收回它
  4. 更新数据库

这必须是“普通”Java。我的意思是没有像 Spring 或 Seam 或类似的全栈框架。

目前,我在客户端使用 MySQL/JPA/Hibernate 进行 ORM,使用 Jackson 进行 JSON 映射,并使用 AngularJS。

对于简单的对象来说,这一切都很好。但随着对象变得越来越复杂,我发现自己编写了越来越多的映射代码。

例如考虑这个(简化的)对象:

class Website {
    long id;
    String name;
    List<Domain> domains;
}
class Domain {
    long id;
    String url;
    Set<String> countries;
}

它将映射到三个表:WebsiteDomainCountry

jackson 做得很好,将其序列化为类似(再次简化):

{
    id: 1,
    name: "My Website"
    domains: [ {
        id: 1,
        url: "www.mysite.de",
        countries: [ "de" ]
    }, {
        id: 2,
        url: "www.mysite.com",
        countries: [ "uk", "us" ]
    } ]
}

Angular 可以很好地处理。

但是在客户端上使用它之后,我可能会在 POST 请求中得到这个:

{
    id: 1,
    name: "My Website"
    domains: [ {
        id: 1,
        url: "www.mysite.de",
        countries: [ "de", "at", "ch" ]
    }, {
        url: "www.mysite.co.uk",
        countries: [ "uk" ]
    }, {
        url: "www.mysite.us",
        countries: [ "us" ]
    } ]
}

Jackson 可以将其映射到相应的 Java 对象,但不会以这种形式存储在数据库中。

现在我必须开始“分析”创建的 java 对象并且:

  1. 获取正确的旧对象
  2. 将新对象的数据复制到旧对象中并处理:
  3. 删除不再存在的子对象
  4. 更新已更改的内容
  5. 插入新的
  6. 然后将其合并回数据库

随着对象变大并包含更多更深的引用链,它会变得非常困惑。

那么有没有更好的方法来手动更新数据库对象?或者有什么工具可以提供帮助吗?

提前致谢!

最佳答案

如果您使用 NoSQL 数据库(例如 MongoDB),您只需将 Jackson 生成的 POJO 存储到数据库中并查询/检索它。

如果没有,那么只需设置您的 Jackson 注释,以不同的方式将字段从 JSON 映射到 Java,或者设置您的 hibernate 映射,以不同的方式从 Java 映射到数据库,并以这种方式匹配所有内容。

如果你确实不能让它以这种方式工作,那么就拥有“客户端”对象和“服务器端”对象 - 然后为每个对象提供一个从另一个对象构建它的构造函数。

然后你可以这样做:

ClientFoo in = ...;
ServerFoo serverIn = new ServerFoo(in);
// Save to database



// Later
serverFoo out = ...;
ClientFoo clientOut = new ClientFoo(out);
// Send to client.

这至少将所有数据映射代码保留在一个位置并将其封装起来,远离其他所有内容。

关于Java:JPA/JSON/REST 往返工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839046/

相关文章:

java - SOAP 故障 : No trusted certs found

java - Android 的 GPS horizo​​ntalAccuracy 究竟意味着什么?

java - 不通过 AndroidBenchmarkRunner 使用 IsolationActivity

javascript - 使用javascript从php获取json数据

java - 将对象集合序列化为 JSON 和 XML

python - Flask登录(无数据库)

java - 使用 Hibernate 玩 Framework - 如何像 Spring 一样使用 DAO/Service/controller

javascript - Angular2 奇怪的硬编码对象与 http.get 对象问题

rest - 如何集成 Ambari REST API 用于集群监控示例

javascript - Electron 中的 REST API