首页 > 其他分享 >Spring MVC无法获取ajax POST的参数和值

Spring MVC无法获取ajax POST的参数和值

时间:2023-01-04 15:44:48浏览次数:36  
标签:name Spring phone ajax MVC POST String

一、怎么会这个样子

很简单的一个想法,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解析。

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

标签:name,Spring,phone,ajax,MVC,POST,String
From: https://www.cnblogs.com/kn-zheng/p/17025044.html

相关文章

  • SpringBoot配置文件中spring
    SpringBoot配置文件中spring.profiles.active配置详解现象:在开发的时候测试和生产配置不一样每次加配置都需要更新生产原因:不方便解决:添加多套配置知识库:1、多环......
  • spring5框架
    概述:Spring是轻量级的开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分:IOC和AOPIOC:控制反转,把创建对象过程交给Spring进行管理AOP:面向切面......
  • springboot 整合activiti
    importlombok.Data;importnet.sf.json.JSONObject;importjava.io.Serializable;importjava.util.Date;/***流程日志扩展类*@authorhxy*@emailhuangx......
  • STS(Spring Tool Suite)使用小技巧记录
    偶尔有些jar包无论如何都无法用maven下载,(例如我正在用的kaptcha)只好自己手动下载了以后再添加。这个时候记得修改以下地方。自动的VMware服务器无法启动,报错如下图解决办法,......
  • STS(Spring Tool Suite)使用前准备
    好了,卖了两个月冰激凌,现在又回来做程序员了。发现好多东西已经忘了。所以拿csdn当个记事本,方便我也方便其他和我有同样问题的人。现在打算用springmvc来做些东西,工具就用st......
  • java spring jar包下载
    想学习一下javaspring,真是不知道怎么来着手。在网上查了一下eclipse里建spring工程的方法:1、创建Java项目转到 文件菜单- 新建- 项目- Java项目。输入项目名称,例如......
  • spring mobile简单试用
    springmobile是spring新推出的一个用于支持移动浏览的小框架,用起来很简单,和springmvc结合也很方便。首先建立一个springmvc的工程然后,在pom.xml中添加springmobile的支......
  • Spring Cloud GateWay基于nacos如何去做灰度发布
    本文基于ReactiveLoadBalancerClientFilter使用RoundRobinLoadBalancer灰度发布灰度发布,又称为金丝雀发布,是一种新旧版本平滑发布的方式。在上面可以对同一个API进行两个版......
  • 通俗易懂的MySQL事务及MVCC原理,我先收藏了!
    一、事务简介与四大特性事务指的是一组命令操作,在执行的过程中,要么全部成功,要么全部失败。由引擎层支持事务,MyISAM就不支持事务,而InnoDB是支持事务的。事务具有以下四......
  • spring boot改2.5.9,Junit4升级成Junit5
    spring-boot从2.2.10.RELEASE改到2.5.9时,发现mvntest,单元测试没有跑,百度一圈,发现  springboot2.2之前使用的是Junit4  springboot2.2之后使用的是Junit5......