没有设置方法的 GWT Autobean

Posted

技术标签:

【中文标题】没有设置方法的 GWT Autobean【英文标题】:GWT Autobean without setter method 【发布时间】:2013-02-27 10:56:27 【问题描述】:

我正在使用 Autobean 框架在我的 GWT 应用程序中编码/解码 JSON。它适用于具有 getter 和 setter 的接口的情况。但是有没有其他方法可以做到这一点而不指定setThisCollectionProperty 而不是使用addToThisCollectionProperty 方法?

比如我有一个接口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) 替换为setIds(List&lt;String&gt; ids),它将起作用。 否则显示如下错误:

com.mycompany.jsonsample.beans.IPerson 参数化并不简单,但是 person 方法没有提供委托

是否可以不使用set 方法进行编码/解码?

【问题讨论】:

我认为这不可能。按照惯例,java 使用 setter 和 getter 进行反射。 @ChristianAchilli 有没有办法通过指定要使用该函数处理的属性来做到这一点? 我不知道。实际上,我不确定您为什么要这样做。从 JSON 的角度来看,Person 应该是一个 DTO。你想做什么? @ChristianAchilli 我必须对一些库接口实现的实例进行编码/解码。这些接口中的大多数只有 getter 和 setter,但有些接口具有像我的示例中的 addId 方法这样的方法,而不是集合 setter 方法。 据我所知这是不可能的。您的 bean 需要遵循命名约定。 (即getPropertysetProperty)。 【参考方案1】:

AutoBean 管理所有的 getter 和 setter,并且只管理 getter 和 setter。对于任何其他方法,您必须使用category

使用类别,您可以因此将addId(…) 实现为getIds().add(…),或者如果AutoBean is a wrapper 可能直接在the underlying object 上调用addIds

【讨论】:

以上是关于没有设置方法的 GWT Autobean的主要内容,如果未能解决你的问题,请参考以下文章

在 GWT 上使用 AutoBean 解析未知类型的 JSON 对象

有没有办法降低 GWT AutoBean?

如何在 GWT 中使用 autobean 将 json 转换为 java 类

在 gwt 中支持 autobean 包装的原因是啥

GWT AutoBean:注释@PropertyName 不再起作用

序列化为 GWT AutoBean 时如何保留 LinkedHashMap 的顺序?