我正在使用Rest-services和JPA編寫的Java啓動HTML5客戶機服務器應用程序。我有一個問題如何實現服務器端。試想一下,你有對象的情況使用Java,JPA,HTML5和REST服務時客戶機 - 服務器應用程序的體系結構
public class User {
private String firstName = "";
private String surName = "";
private Address address = "";
}
public class Address {
private long id = 0L;
private String sAddress ="";
}
即最終實體創建/刪除/更新數據庫時,同時使用REST服務和控制器。
現在我嘗試從ui(使用jquery和ajax)插入一個新用戶到數據庫,並且我已經填充了JSON對象。但是在User-object內部有這個Address-object。有沒有什麼方法來實現/使用它,或者我應該創建新的pojos,只有基本類型,然後創建一個新的層,在這裏我填充最終的JPA實體,如User with Address-object?我希望我的英語能夠解釋這個問題。
- 這是一個好主意來創建一個應用程序,其中數據(JPA實體)與Web服務層和客戶端層中的對象完全相似嗎?
- 任何想法如何實現?
- 它甚至有可能在休息服務中使用自己的對象類型 - HTML5(JSON)組合,或者甚至一般?
您可以使用Netbeans 7.3輕鬆創建這類問題/應用程序。首先創建一個帶有兩個表的數據庫,創建一個項目並從DB生成Web服務,就是這樣。現在你已經有了實體,帶有門面,數據庫和項目的Web服務。
我已經問過這個與之前的示例代碼,但沒有答案: https://stackoverflow.com/questions/14936031/mapping-and-parsing-json-objects-in-ui-and-in-java
和GOR的錯誤這樣的:
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)
非常感謝回答!因此,不可能在客戶端中使用地址對象,如返回JSON.stringify({0});}(user.addressAddressId.address「:$('#address')。val();});你說過:「你可以在這裏使用DAO對象,訪問你的持久層。」這是否比改變與UI類似的DB和JPA實體更好?一個新的層,很多代碼來執行和運行時間對象吃時間和內存? – Sami 2013-02-23 22:21:02
使用REST您正在返回響應,當然可以包含字符串,整數,XML文件或JSON對象。 – sschrass 2013-02-23 22:25:32
我認爲你完全不知道REST背後的想法。我建議先閱讀:https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm,然後決定是否要構建一個RESTful WebService。如果你喜歡REST,可以在這裏簡單看一下:http://www.vogella.com/articles/REST/article.html。 – sschrass 2013-02-23 22:31:09