使用Java,JPA,HTML5和REST服务时客户端 - 服务器应用程序的体系结构

时间:2013-02-23 20:15:18

标签: java json html5 rest jpa

我正在使用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 ="";
}

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

现在我尝试从ui(使用jquery和ajax)向DB插入一个新用户,我已经填充了JSON-object。但是User-object中有Address-object。有没有办法实现/使用或者我应该创建新的pojos只有基本类型,然后是一个新的层,我填充最终的JPA实体,如User with Address-object?我希望我的英语足以解释这个问题。

  1. 创建一个应用程序,其中数据(JPA实体)与Web服务层和客户端层中的对象完全相似,这是一个好主意吗?
  2. 知道如何实现吗?
  3. 甚至可以在休息服务中使用自己的对象类型 - HTML5(JSON)组合甚至一般吗?
  4. 您可以使用Netbeans 7.3轻松创建此类问题/应用。首先用两个表创建一个DB,创建一个项目并从DB生成Web服务,就是这样。现在你有了实体,带有facade,db和项目的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)
    

3 个答案:

答案 0 :(得分:0)

您是否在询问如何创建User JPA对象(对应于USER表),其中包含Address对象(对应于ADDRESS表)?< / p>

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

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

答案 1 :(得分:0)

  

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

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

  

知道如何实现吗?

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

  

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

REST几乎与HTML无关,它是服务工作方式的范例。 HTML是一种可用于与客户端(如浏览器)进行交互的语言。

答案 2 :(得分:0)

根据您获得的异常,您所遗漏的只是Address对象的正确构造函数。你需要Address(String x)构造函数。

相关问题