2013-02-27 104 views
1

我使用Autobean框架在我的GWT應用程序中編碼/解碼JSON。它適用於接口有getter和setter的情況。但有沒有辦法做到這一點,但沒有指定setThisCollectionProperty而是使用addToThisCollectionProperty方法?GWT Autobean沒有setter方法

例如,我有一個接口IPerson這樣的:

public interface IPerson { 
     public String getName(); 
     public void setName(String name); 

     public int getAge(); 
     public void setAge(int age); 

     public List<String> getIds(); 
     public void addId(String id); 
} 

的BeanFactory是這樣的:

public interface BeanFactory extends AutoBeanFactory { 

    public AutoBean<IPerson> person(); 

    public AutoBean<IPerson> person(IPerson person); 


} 

並且其中實現IPerson Person類,

public class Person implements IPerson { 
     private String name; 
     private List<String> ids; 
     ... 

     public List<String> getIds() { 
       return ids; 
     } 

     public void addId(String id) { 
       ... 
       ids.add(id); 
     } 
} 

它如果將addId(String id)替換爲,則適用。 否則示出了以下錯誤:

的com.mycompany.jsonsample.beans.IPerson參數並不簡單,但人方法不提供委託

是否有可能以編碼/解碼沒有set方法?

+0

我不認爲這是可能的。按照慣例,java使用setters和getters來進行反射。 – 2013-02-27 11:16:44

+0

@ChristianAchilli沒有辦法通過指定要用該函數處理的屬性來完成它嗎? – 2013-02-27 11:21:00

+0

不是我所知道的。其實我不確定你爲什麼要這樣做。 Person應該是JSON視角的DTO。你想做什麼? – 2013-02-27 11:54:37

回答

2

AutoBean管理所有獲取者和設置者,並且只管理獲取者和設置者。對於任何其他方法,您必須使用category

使用類別,你可以這樣實現addId(…)getIds().add(…),或者如果AutoBeanis a wrapper可能直接調用addIdsthe underlying object

+0

謝謝..工作 – 2013-03-01 06:49:35