一、怎么会这个样子

很简单的一个想法,ajax以POST的方式提交一个表单,Spring MVC解析。然而一次次的打印null折磨了我整整一天……

最后的解决现在看来是很明显的问题,“只是当时已惘然”……

学海无涯!学海无涯!学海无涯!

二、简单的原罪

ajax提交的代码如下:

  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. $("#submit").click(function(e) {
  4. e.preventDefault();
  5. var obj = $(this);
  6. var name = $("input[name='name']").val();
  7. var phone = $("input[name='phone']").val();
  8. $.ajax({
  9. url : "userAsk",
  10. type : "POST",
  11. contentType : "application/json;charset=utf-8",
  12. data : {name:name,phone:phone},
  13. //dataType : "text",
  14. success : function(result, status, req) {
  15. $(".noticeInfo").css("display", "block");
  16. },
  17. error : function(req, status, reason) {
  18. $(".noticeInfo").css("display", "block").text('Error:' + reason);
  19. }
  20. })
  21. return false;
  22. })
  23. });
  24. </script>

三、纠结的后台

顺便复习一下Spring MVC的取值方式:

1. 通过注解PathVariable获取url中的值。

  1. @RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET)
  2. public String myController(@PathVariable String id,@PathVariable String name, ModelMap model) {
  3. ……
  4. return "ok";
  5. }

2.通过注解RequestParam获取传递过来的值。

  1. @RequestMapping(value = "/test", method = RequestMethod.POST)
  2. public String myTest(@RequestParam("name") String name,@RequestParam("phone") String phone, ModelMap model) {
  3. ……
  4. return "ok";
  5. }

3.通过源生的HttpServletRequest自己动手取值。

  1. @RequestMapping(value="/test" method = RequestMethod.POST)
  2. public String get(HttpServletRequest request, HttpServletResponse response) {
  3. String name = request.getParameter("name"));
  4. return "ok";
  5. }

4.通过注解ModelAttribute直接映射表单中的参数到POJO。

注:暂时没用过,一般这种情况我用JSON序列化。

上面的方法我各种尝试,一直无情的打印null。

四、怀疑后台有没有收到数据?

  1. BufferedReader br;
  2. try {
  3. br = req.getReader();
  4. String str, wholeStr = "";
  5. while((str = br.readLine()) != null){
  6. wholeStr += str;
  7. }
  8. System.out.println(wholeStr);
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }

打印出来的字符串和前端发送的数据一模一样……

五、最后的真相……

我用了最原始的方法,重新写了一个一模一样的表单,这个表单不用ajax,而用form提交。后台能打印出数据了!

对比两个前端的http请求数据,修改了一下ajax提交的数据格式,解决了:

  1. contentType : "application/x-www-form-urlencoded",

也就是说:收到ajax请求,Spring MVC根据“数据类型指示”,按照json格式解析收到的请求。

但是看起来name=lings&phone=13899999999这种以表单数据格式提交的字符串无法匹配json解析。

重新指示数据类型后,上面的取值方法都是可行的。

Spring MVC无法获取ajax POST的参数和值的更多相关文章

  1. Spring MVC如何获取请求中的参数

    目录 一.获取URL中路径参数 1.1 @PathVariable 注解 1.2 @PathParam 注解 二.获取请求参数: 2.1 GET请求 2.1.1 获取请求中的单个参数:@Request ...

  2. 为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】

    每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用.如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring ...

  3. Spring MVC(三)--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  4. 使用Spring mvc接收整个url地址及参数时注意事项

    使用Spring mvc接收整个url地址及参数时注意事项:url= http://baidu?oid=9525c1f2b2cd45019b30a37bead6ebbb&td=2015-08- ...

  5. spring MVC中获取request和response:

    spring MVC中获取request和response: HttpServletRequest request = ((ServletRequestAttributes) RequestConte ...

  6. 解决Spring MVC无法接收AJAX使用PUT与DELETE请求传输的内容

    解决Spring MVC无法接收AJAX使用PUT与DELETE请求传输的内容 解决方案 在 Web.xml文件中 加入以下代码 <!--解决ajax Put与Del请求无法接收到传输的内容-- ...

  7. Spring MVC中获取当前项目的路径

    Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--> <context-param> <param-name>web ...

  8. 使用JS,获取URL中指定参数的值

    /** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...

  9. .net core 无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了

    使用vs 发布.net CORE 项目,调试遇到了“无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了”这个问题,弄了半天才发现是发布的时候没有设置为debug,做个总 ...

随机推荐

  1. centos中的qt设计师所在的包

    由于暂时用不到qt的ide,所以想把它卸了,经过一番查找,其所在的包名是: qt-devel

  2. WCF入门教程:WCF基础知识问与答(转)

    学习WCF已有近两年的时间,其间又翻译了Juval的大作<Programming WCF Services>,我仍然觉得WCF还有更多的内容值得探索与挖掘.学得越多,反而越发觉得自己所知太 ...

  3. CasperJS基于PhantomJS抓取页面

    CasperJS基于PhantomJS抓取页面 Casperjs是基于Phantomjs的,而Phantom JS是一个服务器端的 JavaScript API 的 WebKit. CasperJS是 ...

  4. 给文件加ip访问限制

    获取IP: function getIP(){ return isset($_SERVER['HTTP_X_FORWARDED_FOR'])? $_SERVER['HTTP_X_FORWARDED_F ...

  5. Linux按键驱动程序设计详解---从简单到不简单【转】

    转自:http://blog.csdn.net/coding__madman/article/details/51399353 版权声明:本文为博主原创文章,未经博主允许不得转载. 混杂设备驱动模型: ...

  6. editPlus,3.7V 注册码

    editPlus,3.7V 注册码: username:linzhihui password:5A2B6-69740-D9CDE-79702-C9CCD

  7. 面向生产环境的大集群模式安装Hadoop

    一.实验说明 1.本实验将使用DNS而不是hosts文件解析主机名: 2.使用NFS共享密钥文件,而不是逐个手工拷贝添加密钥: 3.复制Hadoop时使用批量拷贝脚本而不是逐台复制. 测试环境: Ho ...

  8. 记录一下:chrome上,把网页保存为文件的插件

    插件地址: https://chrome.google.com/webstore/detail/full-page-screen-capture/fdpohaocaechififmbbbbbknoal ...

  9. 11、Jsp加强/EL表达式/jsp标签

    1 Jsp基础回顾 Jsp基础 1)Jsp的执行过程 tomcat服务器完成:jsp文件->翻译成java文件->编译成class字节码文件-> 构造类对象-> 调用方法 to ...

  10. HDU 5961:传递(暴搜)

    http://acm.hdu.edu.cn/showproblem.php?pid=5961 题意:中文题意.给出两个图,判断这个两个图是否都是传递的.注意一下传递的定义要看清,一开始没看清连样例都看 ...