没有设置方法的 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<String> ids)
,它将起作用。
否则显示如下错误:
com.mycompany.jsonsample.beans.IPerson 参数化并不简单,但是 person 方法没有提供委托
是否可以不使用set
方法进行编码/解码?
【问题讨论】:
我认为这不可能。按照惯例,java 使用 setter 和 getter 进行反射。 @ChristianAchilli 有没有办法通过指定要使用该函数处理的属性来做到这一点? 我不知道。实际上,我不确定您为什么要这样做。从 JSON 的角度来看,Person 应该是一个 DTO。你想做什么? @ChristianAchilli 我必须对一些库接口实现的实例进行编码/解码。这些接口中的大多数只有 getter 和 setter,但有些接口具有像我的示例中的addId
方法这样的方法,而不是集合 setter 方法。
据我所知这是不可能的。您的 bean 需要遵循命名约定。 (即getProperty
、setProperty
)。
【参考方案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 将 json 转换为 java 类