使用as()后,Autobean返回一个autobean

时间:2016-10-08 08:20:27

标签: java gwt autobean

在我的gwt项目中,我将带有gwt通道api的对象发送到客户端,并使用Autobean对这些对象进行编码和解码。一切正常,我在客户端上收到一个有效的json字符串,并可以再次将该json字符串解码为AutoBean。只有autobean.as()不会返回与autobean本身不同的任何内容。

IContactDto和ContactDto只包含getter和setter。这是我写的那个小伙子

AutoBeanFactory

public interface DtoFactory extends AutoBeanFactory{
    AutoBean<IContactDto> contactDto(IContactDto contactDto);      
}

服务器端代码

DtoFactory dtoFactory = AutoBeanFactorySource.create(DtoFactory.class);
AutoBean<IContactDto> iContactDto = dtoFactory.contactDto(contactDto);
String sJson = AutoBeanCodex.encode(autoBean).getPayload();
// sending this json to the client

客户端代码

这是我用来解码有效json字符串的代码

// sJson string looks like {"id":"6473924464345088", "lastUpdate":"1475914369346", "fullName":"testName1","givenName":"testName2"}

DtoFactory factory = GWT.create(DtoFactory.class);
AutoBean<IContactDto> autoBean = AutoBeanCodex.decode(factory, IContactDto.class, sJson);  // debugger: IContactDtoAutoBean_1_g$             
IContactDto iDto = autoBean.as(); // debugger still shows IContactDtoAutoBean$1_1_g$

我实际上可以使用此对象的getter和setter,但是一旦我尝试继续使用这些对象,我就会遇到类型签名的问题。

任何想法如何让我再次编码回来的对象?

1 个答案:

答案 0 :(得分:0)

AutoBean#as()返回一个“T接口的代理实现,它将委托给底层包装对象,如果有的话。”(来源:javadoc),它永远不会返回包装对象本身。

此外,当从JSON反序列化时,没有包装对象,从头开始创建一个新的autobean&#34;然后填充JSON(它实际上直接包装一个Splittable来自解析的JSON:超轻量级,只是围绕JS对象的一个​​瘦的类型安全包装 - 或者org.json.JSONObject当不在浏览器中。)