0

我正在使用 Rest-services 和 JPA 编写的 java 启动 HTML5-client-server 应用程序。我遇到了如何实现服务器端的问题。想象一下你有对象的情况

public class User {
    private String firstName = "";
    private String surName = "";
    private Address address = "";
}

public class Address {
    private long id = 0L;
    private String sAddress ="";
}

这是创建/删除/更新数据库时同时使用休息服务和控制器的最终实体。

现在我尝试将一个新用户从 ui(使用 jquery 和 ajax)插入 DB,并且我已经填充了 JSON 对象。但是在用户对象中有那个地址对象。有什么方法可以实现/使用它,或者我应该创建新的 pojo,其中只有基本类型,然后是一个新层,我在其中填充最终的 JPA 实体,如带有地址对象的用户?我希望我的英语足够好来解释这个问题。

  1. 这是创建一个数据(JPA 实体)与 Web 服务层和客户端层中的对象完全相似的应用程序的好主意吗?
  2. 知道如何实现吗?
  3. 甚至可以在休息服务中使用自己的对象类型 - HTML5(JSON)组合甚至一般?

您可以使用 Netbeans 7.3 轻松创建此类问题/应用程序。首先创建一个包含两个表的数据库,创建一个项目并从数据库生成 Web 服务,就是这样。现在你已经有了实体、带有外观的 Web 服务、数据库和项目。

我之前用示例代码问过这个问题,但没有答案: https ://stackoverflow.com/questions/14936031/mapping-and-parsing-json-objects-in-ui-and-in-java

并出现这样的错误

WARNING: StandardWrapperValve[ServletAdaptor]: PWC1406: Servlet.service() for servlet ServletAdaptor threw exception
org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class entity.Address] from JSON String; no single-String constructor/factory method (through reference chain: entity.User["addressAddressId"])
    at org.codehaus.jackson.map.deser.std.StdValueInstantiator._createFromStringFallbacks(StdValueInstantiator.java:379)
    at org.codehaus.jackson.map.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:268)
4

3 回答 3

0

你是在问如何创建一个UserJPA对象(对应一个USER表),包含一个Address对象(对应一个ADDRESS表)?

如果是这样,这里有一些答案:

  1. 这样做是完全有效的,但是一些开发人员和框架提倡在 Web 服务层和客户端层之间建立一个抽象层。一些人提倡直接使用这些实体(例如,Rails 通常使用这种模型)。其他人主张为此用途创建特定的数据传输对象(例如,从现有的 WSDL 文件生成服务器存根)。前者的优点是重复少;后者的优点是抽象层,因此如果您更改域,则不必更改 Web 服务层。
  2. 使用@OneToOne注释,至少从UserAddress,可能还有其他方向。上面链接的页面甚至使用了您的带有地址的员工示例。:)

希望有帮助!

于 2013-02-23T20:39:17.863 回答
0

这是创建一个数据(JPA 实体)与 Web 服务层和客户端层中的对象完全相似的应用程序的好主意吗?

在 RESTful WebServices 中,您可以对资源调用 HTTP 方法。通常 aHTTP-GET获取由 URI 定义的资源。因此必须处理该请求,检索数据并以响应的形式放回。如果请求是纯粹的数据检索,那么服务器上的数据和客户端上的数据应该是相似的。

知道如何实现吗?

您可以在此处使用 DAO 对象来访问您的持久层。

甚至可以在休息服务中使用自己的对象类型 - HTML5(JSON)组合甚至一般?

REST 实际上与 HTML 无关,它是服务工作方式的范例。HTML 是一种可以用来与浏览器等客户端交互的语言。

于 2013-02-23T21:48:11.607 回答
0

根据您得到的异常,您所缺少的只是您的 Address 对象的正确构造函数。您需要 Address(String x) 构造函数。

于 2013-12-31T21:26:43.733 回答