【问题标题】:GWT Autobean without setter method没有设置方法的 GWT Autobean
【发布时间】: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)。

标签: json gwt autobean


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多