java GWT在发送前在JSON中序列化POST参数
我正在尝试从GWT客户端调用REST服务器。服务器不在我的控制之下,我只为客户端使用GWT。该服务希望接收一个JSON,该JSON将被Jackson反序列化,并映射到如下Java bean:
public DTO {
String username;
String password;
/*...*/
}
因此,在我的GWT项目中,我创建了这个类:
导入com。谷歌。gwt。json。客户JSONObject; 导入com。lh。克莱特。客户桂。util。cltelabelproperty
public class DTO extends JSONObject {
String username;
String password;
/*...*/
}
我正试图通过这种方式发送一个POST请求:
DTO dto= new DTO();
dto.setUsername(username);
dto.setPassword(password);
RequestBuilder b = new RequestBuilder(RequestBuilder.POST, url);
b.setHeader("content-type", "application/x-www-form-urlencoded");
/***** ERROR *************/
String data = dto.toString(); // JSONObject.toString(), no ovveriding
/*************************/
b.setRequestData(data);
b.setCallback(new MyCallback<DTO>());
try {
b.send();
} catch (RequestException e) {
e.printStackTrace();
}
但是,toString方法不会生成预期的JSON,而是生成字符串“{}”。我哪里做错了? 我还尝试了com。谷歌。gwt。json。客户dev.JsonObject,但它不会改变结果
# 1 楼答案
在通过线路发送之前,必须先将JSO对象串接起来:
此函数在2.7.0-SNAPSHOT中可用,对于2.6.1,您必须创建自己的JSNI方法
# 2 楼答案
如果你的后端使用Jackson,你应该试试gwt-jackson。 如果可以访问源代码,就可以使用任何DTO甚至服务器bean
你这样声明你的地图绘制者:
然后:
顺便说一句,您的内容类型头不应该是
application/json
吗