背景
這要從我比較懶說起。技術框架ExtJS + resteasy,默認請求方式是ajax get,這后台方法就要寫很多@QueryParam來獲取參數。我比較喜歡前台用ajax post請求,后台方法參數就是一個map,所有前台參數映射成map的key-value,然后將map --> json(com.alibaba.fastjson) --> pojo對象。
這里不得不贊一下fastjson轉化數據類型很智能,諸如integer、date類型基本不需要自定義方法就完美轉換。
例子
通過google找到一種很方便的解決方案,自定義用代理proxy來實現發送POST請求,並指定參數類型為json。
Ext.define('Ext.ux.data.proxy.JsonAjaxProxy', {
extend:'Ext.data.proxy.Ajax',
alias:'proxy.jsonajax',
actionMethods : {
create: "POST",
read: "POST",
update: "POST",
destroy: "POST"
},
buildRequest:function (operation) {
var request = this.callParent(arguments);
// For documentation on jsonData see Ext.Ajax.request
request.jsonData = request.params;
request.params = {};
return request;
},
/*
* @override
* Inherit docs. We don't apply any encoding here because
* all of the direct requests go out as jsonData
*/
applyEncoding: function(value){
return value;
}
});
使用也很方便,將proxy的type設置為jsonajax即可。
proxy : { type : 'jsonajax' ... }
