zoukankan      html  css  js  c++  java
  • 转:POST 400 Bad Request The request sent by the client was syntactically incorrect

    最近在做Web开发的时候,使用$.post提交数据,但是回调函数却没有被触发,按F12看控制台输出是:POST *** 400 Bad Request

    后台是SpringMVC的,设置了断点也不会被触发。

    后来查看JQuery资料了解到,$.post提交数据只有成功时才触发回调函数,于是改用$.ajax提交数据,添加error回调函数,得到错误信息了,如下图:

    这个问题是什么原因造成的呢?

    后来经过测试发现,是表单提交的内容数据类型与实体的(也就是数据表字段)的数据类型不匹配导致的。

    在提交表单之前应该对用户输入的内容做验证,后台直接做映射了,没有做内容验证的机会。

     

    解决方法:

    上面只是描述了问题产生的原因,而并没有给出解决的方法,很多小伙伴其实看到原因就已经想到解决方法了。

    那有些小伙伴可能刚接触,还搞不清状况,我就再说一下解决的步骤:

    1、改用$.ajax提交数据,添加error回调函数(其实在开发中严格来说是不允许使用$.post的,因为失去了错误处理的功能);

    类似代码如下,具体请参考JQurey参考手册:

    $.ajax({
       type: "POST",
       url: "some.php",
       data: "name=John&location=Boston",
       success: function(msg){
         alert( "Data Saved: " + msg );
       },
        error: function(XMLHttpRequest){
         alert( "Error: " + XMLHttpRequest.responseText);
       }
    });

    这样你就可以通过 XMLHttpRequest.responseText 或XMLHttpRequest.responseHTML 了解到后端代码到底发生了什么错误。

    2、不要把生成实体的工作交给MVC框架来完成

    你的产生问题的代码,我猜测可能类似如下:

    	/** 
    	 * 添加用户.
    	 **/
    	@RequestMapping("/adduser.do")
    	@ResponseBody
    	public void adduser(HttpServletRequest request, HttpServletResponse response, User user) throws Exception {
    		this.userManager.saveOrUpdate(user);
    	}

    这样做就导致上面说过的问题:后台直接做映射了,没有做内容验证的机会;明明一个字段要求数字,结果用户输入了字母或汉字。

    正确的方法类似如下:

    	/** 
    	 * 添加用户.
    	 **/
    	@RequestMapping("/adduser.do")
    	@ResponseBody
    	public void adduser(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		//将形参 user 拿到函数内部定义创建
    		User user = new User();
    		//这里对用户的年龄就要进行判断,具体规则你自己定义,我只是举个例子
    		Integer age = getInteger("age");
    		if (age != null){
    			uset.SetAge(age);
    		}
    		this.userManager.saveOrUpdate(user);
    	}
    	
    	protected Integer getInteger(String name) {
    		String str = this.request.getParameter(name);
    		if (StringUtils.isNotBlank(str)) {
    		  return Integer.valueOf(str);
    		}
    		return null;
    	  }
  • 相关阅读:
    POJ1239
    HDU 2829 四边形不等式优化
    返回数字二进制的最高位位数o(n)
    矩阵快速幂 模板
    HDU4718 The LCIS on the Tree(LCT)
    HDU4010 Query on The Trees(LCT)
    HDU3487 Play With Chains(Splay)
    CF444C DZY Loves Colors
    HDU4836 The Query on the Tree(树状数组&&LCA)
    HDU4831&&4832&&4834
  • 原文地址:https://www.cnblogs.com/imqsl/p/7678992.html
Copyright © 2011-2022 走看看