Ilj*_*nen 1 java gwt annotations autobean
我使用AutoBean将数据编码/解码为JSON,这在以前的GWT版本中都可以.在我看来,AutoBean是处理JSON的非常好用且方便的工具.自GWT ver.2.4.0以来,这个功能已经改变,我花了一些时间在我的代码中恢复它.但只有一个部分仍未固定 - 注释@PropertyName.此注释用于向属性添加"别名".它节省了大量的网络流量.现在它引发了一个例外.代码示例如下:
import com.google.web.bindery.autobean.shared.AutoBean.PropertyName;
public interface IPersonInfo {
// Name
@PropertyName("n")
public String getName();
public void setName(String name);
// Surname
@PropertyName("s")
public String getSurname();
public void setSurname(String surname);
// other properties...
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试以这种方式将其解码为JSON:
AutoBean<IPersonInfo> user = factory.user();
// clone the userDto (it's a new way to clone an object in ver 2.4.0
// instad of deprecated clone() method)
Splittable data = AutoBeanCodex.encode(user);
IPersonInfo userDto = AutoBeanCodex.decode(factory, IPersonInfo.class, data).as();
userDto.setName("Name");
userDto.setSurname("Surname");
//... other properties
Run Code Online (Sandbox Code Playgroud)
这段代码在遗留代码中完美运行.但现在(在GWT 2.4.0中)我得到一个例外:
java.lang.IllegalArgumentException: name
at com.google.web.bindery.autobean.shared.impl.AutoBeanCodexImpl.doCoderFor(AutoBeanCodexImpl.java:524)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.setProperty(AbstractAutoBean.java:276)
at com.google.web.bindery.autobean.vm.impl.ProxyAutoBean.setProperty(ProxyAutoBean.java:253)
at com.google.web.bindery.autobean.vm.impl.BeanMethod$3.invoke(BeanMethod.java:103)
at com.google.web.bindery.autobean.vm.impl.SimpleBeanHandler.invoke(SimpleBeanHandler.java:43)
at $Proxy74.setName(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:104)
at com.google.web.bindery.autobean.vm.impl.ShimHandler.invoke(ShimHandler.java:81)
at $Proxy74.setName(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
如果我从界面中删除@PropertyName,则不会发生异常.
我还在等待,官方文档将会更新,但它仍然保留旧的代码示例.
有人可以帮我解决这个问题吗?谢谢你的建议.
我使用GWT ver.2.4.0,GAE ver.1.6.1.
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |