2014-09-03 166 views
0

我想知道在Android項目和後端項目中共享相同POJO的最佳方式是什麼。在Android項目和java後端項目之間共享POJO

當我在後端有POJO的時候,這個POJO有Hibernate和Jackson註解。在類的頂部有作爲@NameQueries的HQL句子。 當我在Android項目中需要相同的POJO時,複製POJO並刪除所有註釋。目前我在Android項目中使用GSON。

所以我的問題是,當我在後端創建新的POJO並且我也需要它在Android項目中時,最好的辦法是擺脫這種單調乏味的工作。

到目前爲止,我已經想過創建lib項目,但我還沒有想出如何控制註釋。在Android方面,我也可以和傑克遜合作,但我想擺脫Hibernate的東西。

回答

0

我想GSON會是你最好的選擇。但要注意,在hibernate中與關係(一對多,多對多)有關的問題可能會導致錯誤,因爲解析爲json時,字段的方法被調用,您需要指出是否應該急切地提取或延遲提取該字段。如果您不需要android中的字段,則可以在後端的pojo中使用@Expose批註,以指示哪些字段只應公開或轉換爲json。我認爲@Expose只有availbe在google's json

0

最好的方法是使用序列化「方案」(缺乏更好的單詞)將您的POJO序列化爲可以由Android卸載的序列化流。

現代編程技術中使用的最常見格式是JSON,因此使用JSON時,可以創建一個服務,將POJO呈現爲JSON對象,並且您的Android應用程序將從JSON反序列化爲POJO。

服務可以是Restful Web服務,也可以創建將POJO呈現爲JSON的自定義服務。現在Java 7包含JSR-353,JSON處理(簡稱JSON-P),它提供了各種功能和類來提供JSON編組和解組。一個簡單的教程可以找到here

在您的Android應用程序中,您可以使用GSON進行JSON解組。

我希望這個幫助。

+0

感謝您的回答,但當Android應用向RESTful Web服務發出請求時正在使用JSON。我的問題是服務器和Android客戶端代碼中的底層POJO。我遺漏了JSON部分,因爲我認爲它不相關。 – user3409855 2014-09-04 09:34:42

+0

您需要爲客戶端和服務器「克隆」這些POJO。不要忘記,Android編譯POJO的方式與JDK不同,因此爲什麼JSON是兩種平臺的消息傳輸。 – 2014-09-04 10:23:18

0

我可以看到在這兩個POJO中共享這些POJO的吸引力,但我認爲最好的選擇是在共享庫中創建一組簡單的DTO,並使用後端和android中的這些DTO。在兩個項目中擁有相同的實際域對象的問題正是你所描述的 - 你在做後端類型的事情,不屬於前端。

的客戶一個簡單的例子(其中一種具有一些交叉在與建築商模式,所以你可以重新使用這些DTO的從一個建設者):

//this is your back end "proper" domain object 
class Customer 
{ 
    <back end specifics> 
    ... 

    Customer(CustomerDTO customer) 
    { 
     //set Customer fields from the dto 
    } 

    CustomerDTO toDTO() 
    { 
     CustomerDTO dto = new CustomerDTO(); 
     dto.setName(this.getName()); 
     dto.setAddress(this.getAddress()); 
     ... 

     return dto; 
    } 
} 

那麼你的DTO是一個簡單的版本在你的共享庫中,不應該需要傑克遜註釋,因爲它會自動默認只包含你想要在客戶端上的內容。正如你所說的,如果你確實需要一些傑克遜註解,那麼在Android方面很好。這是DTO你會從後端發回:

public class CustomerDTO 
{ 
    private String mName; 

    public String getName() 
    { 
     return mName; 
    } 

    ... 
} 

雖然仍然有重複結束(正確的域對象和DTO之間),如果你在它必須在後端改變任何東西它確實意味着也改變了DTO以便客戶端看到,因此客戶端保持同步,因爲它使用相同的DTO。