`
cn_arthurs
  • 浏览: 327026 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

奇怪的400 BAD REQUEST

 
阅读更多

    项目以Spring MVC + Hibernate 为后台,前台通过Jquery的AJAX对象,向后台POST一个JSON对象,Spring MVC的Controller方法通过@RequestBody自动转换成POJO对象。

 

在测试的时候,通过httpwatch发现前台总是收到Error 400 BAD_REQUEST错误信息,并且请求时content-length始终为0.



 

而后台的日志则显示如下:

2013-12-31 09:47:46,700 DEBUG [13180593@qtp-459327-2] (DispatcherServlet.java:823) - DispatcherServlet with name 'SpringServlet' processing POST request for [/ma/um/saveuser.do]
2013-12-31 09:47:46,700 DEBUG [13180593@qtp-459327-2] (AbstractHandlerMethodMapping.java:220) - Looking up handler method for path /um/saveuser.do
2013-12-31 09:47:46,700 DEBUG [13180593@qtp-459327-2] (AbstractHandlerMethodMapping.java:227) - Returning handler method [public com.zhiqiang.ma.um.entity.Person com.zhiqiang.ma.um.controller.UserController.saveuser(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,com.zhiqiang.ma.um.entity.Person)]
2013-12-31 09:47:46,701 DEBUG [13180593@qtp-459327-2] (AbstractBeanFactory.java:246) - Returning cached instance of singleton bean 'userController'
2013-12-31 09:47:46,701 DEBUG [13180593@qtp-459327-2] (AbstractMessageConverterMethodArgumentResolver.java:140) - Reading [class com.zhiqiang.ma.um.entity.Person] as "application/json;charset=UTF-8" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@e9fc96]
2013-12-31 09:47:46,702 DEBUG [13180593@qtp-459327-2] (AbstractHandlerExceptionResolver.java:132) - Resolving exception from handler [public com.zhiqiang.ma.um.entity.Person com.zhiqiang.ma.um.controller.UserController.saveuser(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,com.zhiqiang.ma.um.entity.Person)]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: No content to map to Object due to end of input; nested exception is java.io.EOFException: No content to map to Object due to end of input
2013-12-31 09:47:46,705 DEBUG [13180593@qtp-459327-2] (AbstractHandlerExceptionResolver.java:132) - Resolving exception from handler [public com.zhiqiang.ma.um.entity.Person com.zhiqiang.ma.um.controller.UserController.saveuser(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,com.zhiqiang.ma.um.entity.Person)]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: No content to map to Object due to end of input; nested exception is java.io.EOFException: No content to map to Object due to end of input
2013-12-31 09:47:46,706 DEBUG [13180593@qtp-459327-2] (AbstractHandlerExceptionResolver.java:132) - Resolving exception from handler [public com.zhiqiang.ma.um.entity.Person com.zhiqiang.ma.um.controller.UserController.saveuser(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,com.zhiqiang.ma.um.entity.Person)]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: No content to map to Object due to end of input; nested exception is java.io.EOFException: No content to map to Object due to end of input
2013-12-31 09:47:46,708 DEBUG [13180593@qtp-459327-2] (DispatcherServlet.java:999) - Null ModelAndView returned to DispatcherServlet with name 'SpringServlet': assuming HandlerAdapter completed request handling
2013-12-31 09:47:46,708 DEBUG [13180593@qtp-459327-2] (FrameworkServlet.java:966) - Successfully completed request

 

根据日志分析得出,jquery并没有将数据发送到MappingJacksonHttpMessageConverter,所以才会报错。

 

多天以来度娘、谷哥给予了很大的帮助,后来发现原来是httpwatch在捣乱,将httpwatch关闭后,问题解决了。附代码仅供参考。

1.后台XML配置

<mvc:annotation-driven />
	
	
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
	
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter"/>
			</list>
		</property>
	</bean>
	 
	<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
				<value>application/x-www-form-urlencoded</value>
			</list>
		</property>
	</bean>

 2.Contorller方法

@RequestMapping(value="/um/saveuser.do",method = RequestMethod.POST)
	public  @ResponseBody Person saveuser(HttpServletRequest request,HttpServletResponse response,@RequestBody Person user){
		log.debug(user.toString());
		return user;
	}

 3.前台代码

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="../script/jquery-1.10.2.min.js"></script>
<script>
var cfg = {
        type: 'POST', 
        data: JSON.stringify({userName:'测试用户',password:'password'}), 
        dataType: 'json',
        contentType:'application/json;charset=UTF-8',        
        success: function(result) { 
            alert(result); 
        } 
    };

function doTestJson(actionName){
    cfg.url = actionName;
    $.ajax(cfg);
}
</script>
</head>
<body>
	<a href="#" onClick="doTestJson('saveuser.do');">jsonlogin</a>

</body>
</html>

 

参考:

  http://bugs.jquery.com/ticket/12790

 

 

 

  • 大小: 53.8 KB
分享到:
评论
1 楼 wps886 2014-08-15  
google了半天全是错的,只有楼主的xml配置有用,太感谢了!!!

相关推荐

    nginx服务器access日志中大量400 bad request错误的解决方法

    在本篇文章中,我们将详细探讨Nginx服务器access日志中出现大量400 bad request错误的解决方法。首先,我们需要了解400 bad request错误的含义。这种错误通常表示客户端发出了无效请求,服务器无法理解请求内容。...

    Postman 接口测试

    Postman是一款流行的API(应用程序编程接口)测试工具,它支持用户设计和执行HTTP请求,检查和分析API的响应。它广泛应用于后端和前端开发中的接口测试环节,有助于开发者快速定位问题、优化接口性能和确保接口的...

    Ajax报错400的参考解决办法

    在使用Ajax进行数据交互时,有时会遇到"400 Bad Request"的错误,这通常意味着服务器无法理解客户端(浏览器)发送的请求。在这种情况下,错误的根本原因通常是前端发送的数据格式不符合后端接口的预期。这里我们将...

    loadrunne11之VuGen相关技术

    ### Loadrunner11之VuGen相关技术 #### VuGen总览与录制选项设置 **Loadrunner**是一款由Micro Focus公司推出的性能测试工具,主要用于评估软件系统在压力下的表现。其中,**VuGen**(Virtual User Generator)是...

    基于python 爬虫爬到含空格的url的处理方法

    在某网站主页提取url进行迭代,爬虫请求主页时没有问题,返回正常,但是在访问在主页提取到的url时出现了400状态码(400 Bad Request)。 结论 先贴出结论来,如果url里有空格的话,要把空格替换成 ,也就是url编码,...

    badusb.zip_bad usb_badusb_badusb下载_badusb制作教程_badusb脚本开发

    【标题】"badusb.zip" 涉及到的核心知识点是 "BadUSB",这是一个针对USB设备的安全漏洞利用技术,可以将普通的USB设备转化为恶意设备,对计算机系统造成严重威胁。BadUSB的概念由安全研究人员在2014年提出,揭示了...

    AccessLog_scan_badRequest

    scan bad request from Access_log About vim config.py for simply configures, 首先先配置些个参数,比如 + 需要扫描的日志文件 + 日志格式 + 输出记录文件 + 报警百分比 + url预处理条件 and then run 然后走着 ...

    Badboy

    BadboyInstaller-2.0.5.exe Badboy监控internet explorer的活动,提供...继续录制脚本. Remark:必须等到上一步的request处理完毕后,才能点击发送下一个request,否则下一个request会作为第一个request的子frame.

    修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题

    当 IIS6/IIS7/7.5 收到的请求头的长度超过16K(默认值),就会引发"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的错误

    Discuz Bad Request (Invalid Hostname)问题解决方法(Discuz 和DX都适用)

    俺在做手机团购站用户登录退出的时候老提示Bad Request (Invalid Hostname)经过多次折腾,服务器,DNS,IIS都设置没有问题,域名设置也没有问题,但是还是提示Bad Request (Invalid Hostname)

    badboy使用手册

    Badboy 使用手册知识点总结 Badboy 是一款开源测试工具,主要用于录制脚本、参数化和基本性能测试。下面是 Badboy 使用手册的知识点总结: 一、Badboy 下载安装 * BadboyInstaller-2.0.5 是当前版本 * 下载安装后...

    response和request(web开发技术第四章)

    2. 验证这些数据是否有效,如果无效,可以通过`response`设置状态码为400(Bad Request)并返回错误信息。 3. 如果数据有效,可能执行数据库操作,如创建新用户。 4. 最后,通过`response`设置状态码为200(OK)并...

    Badboy——浏览器录制脚本工具

    Badboy是一款专业的软件测试工具,尤其适用于Web应用的自动化测试,它以其独特的浏览器录制脚本功能而备受青睐。这款工具能够捕获用户在浏览器中的所有交互动作,如点击、滚动、填写表单等,并将这些操作转化为可...

    linux上squid设置透明代理教程

    英文的哈,嘿嘿,想看中文的下了别骂我,这个教程是从tldp上搞下来的,很详细

    Badboy Badboy Badboy Badboy Badboy Badboy

    Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy Badboy

    Badboy使用教程

    在Request模式下,Badboy会记录HTTP请求,不受页面元素变更影响,适合性能测试,但可能需要设置更多断点。Navigation模式则记录页面导航,依赖于具体的页面元素。 在录制过程中,用户先输入网址,然后开始录制,如...

    国标gb28181 抓包

    标题中的“国标gb28181 抓包”指的是中国国家标准GB/T 28181,这是一个关于公共安全视频监控网络系统信息传输、交换、控制的技术标准。在这个标准下,抓包(Packet Capture)是用于分析网络通信过程中的数据传输行为...

    Linux服务器nginx访问日志里出现大量http 400错误的请求分析

    HTTP 400错误代表“Bad Request”,意味着客户端发送的请求不符合HTTP协议规范。在本文中,我们将深入探讨这种错误的常见原因以及如何进行分析和解决。 首先,我们可以通过分析Nginx的访问日志来查找问题线索。例如...

    badboy中文手册

    Badboy也是一个强大的测试工具,是用C++开发的,被设计用于测试和开发复杂的动态应用。Badboy功能丰富(包括一个捕获/重播接口,强大的压力测试支持,详细的报告、图形)使得测试和开发更加容易。 官方网址:...

Global site tag (gtag.js) - Google Analytics