开发者社区> 问答> 正文

jfinal RESTful 部署到tomcat后 ajax put请求获取不到参数 400 请求报

$("#submit").click(function() {
			var u = "#"
			$.ajax({
				url : u,
				data : $("#form").serialize(),
				type : "put",
				success : function(data) {
					alert(data.msg);
					if (data.code == 1) {
						window.location.href = "#";
					}
				}
			});
		});
本地jetty 上运行完全没问题。  tomcat上不行。   我个人觉得是tomcat的原因。但是在tomcat中执行。对应的方法是执行了。诡异的是获取不到参数。
tomcat打印的
JFinal action report -------- 2013-03-22 18:54:21 ------------------------------
Controller  : com.xx.controller.RoleController.(RoleController.java:1)
Method      : update
UrlPara     : 1
Interceptor : com.xx.interceptor.ExceptionInterceptor.(ExceptionInterceptor.java:1)
              com.xx.interceptor.MyRestful.(MyRestful.java:1)
              com.jfinal.ext.interceptor.SessionInViewInterceptor.(SessionInViewInterceptor.java:1)
              com.xx.interceptor.LoginInterceptor.(LoginInterceptor.java:1)
              com.xx.interceptor.AuthInterceptor.(AuthInterceptor.java:1)
--------------------------------------------------------------------------------
jetty打印的。
JFinal action report -------- 2013-03-22 11:11:30 ------------------------------
Controller  : com.xx.controller.RoleController.(RoleController.java:1)
Method      : update
UrlPara     : 1
Interceptor : com.xx.interceptor.ExceptionInterceptor.(ExceptionInterceptor.java:1)
              com.xx.interceptor.MyRestful.(MyRestful.java:1)
              com.jfinal.ext.interceptor.SessionInViewInterceptor.(SessionInViewInterceptor.java:1)
              com.xx.interceptor.LoginInterceptor.(LoginInterceptor.java:1)
              com.xx.interceptor.AuthInterceptor.(AuthInterceptor.java:1)
Parameter   : ids[]={2,28,3,4,5,7,8,10,11,12,13,14,15,16,18,19,20,21,22,24,25,26,27}  
--------------------------------------------------------------------------------

@JFinal

展开
收起
kun坤 2020-05-29 10:10:37 663 0
1 条回答
写回答
取消 提交回答
  •     JFinal Action Report 表明在 tomcat 环境下,JFinal 并没有接收到请求参数,证明确实没有收到请求,因为 JFinal 是很直接的从 HttpServletRequest中取参数并输出的。所以问题肯定出在请求本身,很可能请求被 Tomcat 改过变了,改变的原因最常见的是被重定向导致参数丢失。
        Tomcat 有很多莫名其妙、自做主张的行为,OSC上 JFinal问答至少列出了三个自做主张的情况 ######websphere上也不行######事实证明使用jboss容器也不行。######tomcat确实挺奇怪的。jetty参获取到 put方法的表单参数,tomcat获取不到。######目测是这个原因: http://www.oschina.net/question/941098_93842  POST 方法在被 redirect 以后丢失了参数,所以得不到了,chrome 可以看请求,有一个 302 重定向  ######谢谢啊,不过不是这个原因。我看过请求了。只有一个put请求。 状态码是200。 而且显示的是参数已经传过去了。我调用的controllerkey是role WebRoot下也没这个目录。######

    引用来自“JFinal”的答案

        JFinal Action Report 表明在 tomcat 环境下,JFinal 并没有接收到请求参数,证明确实没有收到请求,因为 JFinal 是很直接的从 HttpServletRequest中取参数并输出的。所以问题肯定出在请求本身,很可能请求被 Tomcat 改过变了,改变的原因最常见的是被重定向导致参数丢失。     Tomcat 有很多莫名其妙、自做主张的行为,OSC上 JFinal问答至少列出了三个自做主张的情况
    我自己去试了下。解决了这个问题。 解决方法是把参数以GET的方式拼到URL 中。就能获取到参数了。 ######建议把请求类型改为POST,GET请求只能在url中挂参###### PUT 请求获取不到参数,是因为 PUT 请求的参数不是存放在 HTTP Header 中的,而是在 HTTP Body 中,所以无法通过 request.getParameter() 方法来获取参数。 如果想要获取 PUT 请求的参数,可以参考如下这段代码:
    String queryString = "";
    BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        queryString += line;
    }
    拿到了 queryString,它是一个“a=1&b=2”格式的字符串,然后可以轻松的转换成一个 Map,最后通过 map.get() 方法获取指定的参数。 ######看到你的回答才知道楼主以前提的是 PUT,一直以为是 GET 呢,汗颜
    2020-05-29 14:13:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载