项目以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
相关推荐
在本篇文章中,我们将详细探讨Nginx服务器access日志中出现大量400 bad request错误的解决方法。首先,我们需要了解400 bad request错误的含义。这种错误通常表示客户端发出了无效请求,服务器无法理解请求内容。...
Postman是一款流行的API(应用程序编程接口)测试工具,它支持用户设计和执行HTTP请求,检查和分析API的响应。它广泛应用于后端和前端开发中的接口测试环节,有助于开发者快速定位问题、优化接口性能和确保接口的...
在使用Ajax进行数据交互时,有时会遇到"400 Bad Request"的错误,这通常意味着服务器无法理解客户端(浏览器)发送的请求。在这种情况下,错误的根本原因通常是前端发送的数据格式不符合后端接口的预期。这里我们将...
### Loadrunner11之VuGen相关技术 #### VuGen总览与录制选项设置 **Loadrunner**是一款由Micro Focus公司推出的性能测试工具,主要用于评估软件系统在压力下的表现。其中,**VuGen**(Virtual User Generator)是...
在某网站主页提取url进行迭代,爬虫请求主页时没有问题,返回正常,但是在访问在主页提取到的url时出现了400状态码(400 Bad Request)。 结论 先贴出结论来,如果url里有空格的话,要把空格替换成 ,也就是url编码,...
【标题】"badusb.zip" 涉及到的核心知识点是 "BadUSB",这是一个针对USB设备的安全漏洞利用技术,可以将普通的USB设备转化为恶意设备,对计算机系统造成严重威胁。BadUSB的概念由安全研究人员在2014年提出,揭示了...
scan bad request from Access_log About vim config.py for simply configures, 首先先配置些个参数,比如 + 需要扫描的日志文件 + 日志格式 + 输出记录文件 + 报警百分比 + url预处理条件 and then run 然后走着 ...
BadboyInstaller-2.0.5.exe Badboy监控internet explorer的活动,提供...继续录制脚本. Remark:必须等到上一步的request处理完毕后,才能点击发送下一个request,否则下一个request会作为第一个request的子frame.
当 IIS6/IIS7/7.5 收到的请求头的长度超过16K(默认值),就会引发"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的错误
俺在做手机团购站用户登录退出的时候老提示Bad Request (Invalid Hostname)经过多次折腾,服务器,DNS,IIS都设置没有问题,域名设置也没有问题,但是还是提示Bad Request (Invalid Hostname)
Badboy 使用手册知识点总结 Badboy 是一款开源测试工具,主要用于录制脚本、参数化和基本性能测试。下面是 Badboy 使用手册的知识点总结: 一、Badboy 下载安装 * BadboyInstaller-2.0.5 是当前版本 * 下载安装后...
2. 验证这些数据是否有效,如果无效,可以通过`response`设置状态码为400(Bad Request)并返回错误信息。 3. 如果数据有效,可能执行数据库操作,如创建新用户。 4. 最后,通过`response`设置状态码为200(OK)并...
Badboy是一款专业的软件测试工具,尤其适用于Web应用的自动化测试,它以其独特的浏览器录制脚本功能而备受青睐。这款工具能够捕获用户在浏览器中的所有交互动作,如点击、滚动、填写表单等,并将这些操作转化为可...
英文的哈,嘿嘿,想看中文的下了别骂我,这个教程是从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
在Request模式下,Badboy会记录HTTP请求,不受页面元素变更影响,适合性能测试,但可能需要设置更多断点。Navigation模式则记录页面导航,依赖于具体的页面元素。 在录制过程中,用户先输入网址,然后开始录制,如...
标题中的“国标gb28181 抓包”指的是中国国家标准GB/T 28181,这是一个关于公共安全视频监控网络系统信息传输、交换、控制的技术标准。在这个标准下,抓包(Packet Capture)是用于分析网络通信过程中的数据传输行为...
HTTP 400错误代表“Bad Request”,意味着客户端发送的请求不符合HTTP协议规范。在本文中,我们将深入探讨这种错误的常见原因以及如何进行分析和解决。 首先,我们可以通过分析Nginx的访问日志来查找问题线索。例如...
Badboy也是一个强大的测试工具,是用C++开发的,被设计用于测试和开发复杂的动态应用。Badboy功能丰富(包括一个捕获/重播接口,强大的压力测试支持,详细的报告、图形)使得测试和开发更加容易。 官方网址:...