一、怎么会这个样子

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

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

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

二、简单的原罪

ajax提交的代码如下:

 <script type="text/javascript">
$(document).ready(function() {
$("#submit").click(function(e) {
e.preventDefault();
var obj = $(this);
var name = $("input[name='name']").val();
var phone = $("input[name='phone']").val();
$.ajax({
url : "userAsk",
type : "POST",
contentType : "application/json;charset=utf-8",
data : {name:name,phone:phone},
//dataType : "text",
success : function(result, status, req) {
$(".noticeInfo").css("display", "block");
},
error : function(req, status, reason) {
$(".noticeInfo").css("display", "block").text('Error:' + reason);
}
})
return false;
})
});
</script>

三、纠结的后台

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

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

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

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

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

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

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

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

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

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

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

         BufferedReader br;
try {
br = req.getReader();
String str, wholeStr = "";
while((str = br.readLine()) != null){
wholeStr += str;
}
System.out.println(wholeStr);
} catch (IOException e) {
e.printStackTrace();
}

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

五、最后的真相……

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

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

 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. 查看linux的出错信息

    先执行:dmesg -c > /dev/null 该命令是把之前的一些信息删除,-c选项表示:Clear the ring buffer after first printing its con ...

  2. C++代码段六

    摘自<Primer Plus>浮点数优缺点: void test109() { float a=2.34E+22f; float b=a+1.0f; cout<<"a ...

  3. Controller 接口控制器详解

    Controller 控制器,是 MVC 中的部分 C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1.收集.验证请求参数并绑定到命令对象:2.将命令对象交给业务对象,由业务对象处理并返回模 ...

  4. 《HTML5高级程序设计》知识点概要(不涉及详细语法)

    不断更新. 说明:主要记录html5中的一些注意点或知识点,尽量不涉及具体语法信息. 一.CANVAS: 检测: try{ document.createElement("canvas&qu ...

  5. ubuntu修改文件权限记录

    查看文件权限的命令: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表 ...

  6. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.7.Slider控件

    默认slider的安装启用 为slider自定义风格 修改配置选项 创建一个垂直的slider 设置最大最小值,和默认值 启用多个 手柄 和 范围 slider内置的回调事件 slider的方法 这个 ...

  7. webservice cxf error:类的两个属性具有相同名称 "password"

    execption detail: Caused by: javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.Servic ...

  8. java.security.NoSuchAlgorithmException: DES KeyGenerator not available

    更改jre,点击项目build path-->configure build path-->libraries-->jre library system-->edit--> ...

  9. Word and MediaElement

    function jmc_new_lib(){// Because we still want the script to load but not the styleswp_enqueue_scri ...

  10. JavaEE基础(二十六)/网络

    1.网络编程(网络编程概述) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...