CacheInterceptor不支持Post请求?

pandyyan 发布于 2013/11/29 10:19
阅读 151
收藏 0

@JFinal 你好,想跟你请教个问题:

CacheInterceptor构建CacheKey时,如果是POST请求,urlPara为空,并且queryString也获取不到参数串;改成GET的话urlPara可以获取到值 ,是没有问题的,不知道哪里出了问题。

private String buildCacheKey(ActionInvocation ai, Controller controller) {
		StringBuilder sb = new StringBuilder(ai.getActionKey());
		String urlPara = controller.getPara();
		if (urlPara != null)
			sb.append("/").append(urlPara);
		
		String queryString = controller.getRequest().getQueryString();
		if (queryString != null)
			sb.append("?").append(queryString);
		return sb.toString();
	}



$.ajax({
        url : basepath + '/userinfo/checkConfigUserAuth',
        type : 'POST',
        async : async, // 同步执行
        data : {
            optpurview : optpurview,
            deptid : deptid,
            userId: userId
        },
        dataType : 'JSON',
        success : function(data) {
            if (data.success) {
                callbackfunc();
            }
        },
        error : function(data) {
            $.messager.alert('提示', '系统异常,请联系管理员!', 'error');
        }
    });



@缪斯的情人 @绝望的八皮 @alvinte @玛雅牛 多谢各位!!!

加载中
0
JFinal
JFinal

    一般来说 POST 请求涉及到内容的改变,这类情况通常需要去更新缓存,而不是将请求缓存住,所以 JFinal 没有对 POST 请求做非常深的支持,即没有将 getPara 中能获取的值参与生成 cacheKey。

    同时这样做也是为了提升点性能,POST请求中的参数参与生成cacheKey是需要消耗一定的性能。

    开发者若在特殊情况下有对 POST请求进行缓存的需求,可以自己照着CacheInterceptor写一个拦截器。

    

pandyyan
pandyyan
谢谢@JFinal ,这样的话文档中最好能说明一下,否则很容易出问题的。
0
缪斯的情人
缪斯的情人
没遇到类似问题,一直在用post请求
pandyyan
pandyyan
post没有问题吗?getQueryString():也是获取url?后面的参数的,getPara()也是截取url挂参的,如果是post请求的话,是获取不到参数的。
返回顶部
顶部