$.ajax contenType是appliation/json的时候,spring mvc后台无法接受data参数

news/2024/7/11 2:00:45 标签: jquery, ajax

$.ajax contenType是appliation/json的时候,spring mvc后台无法接受data参数

做Redis监控工具的时候,发现$.ajax contenType是appliation/json的时候,在后台用spring mvc的@Requestparam注解接收参数,始终接收不到。

前台代码:

$.ajax({

                    url : "${ctx}/rediscluster/delete.do",

                    data : JSON.stringify (' {"rname":rname}'),

                    type : "post",

                    dataType:"text",

contentType : "application/json",

                    success : function(data) {

                     if(data == 'OK'){

                     window.location = "${ctx}/system/redis/nodesmanager.jsp";

                     }

                    }

                });

后台的主要代码:

@ResponseBody

    @RequestMapping(value="/delete.do",produces = {"application/json;charset=utf-8"})

    public String deletenode(@RequestParam("rname")String rname) throws GeneralException{

        SqlSession sqlsession = sqlsessionfactory.openSession();

在@RequestParam("rname")String rname接收参数的时候,总是报错:String parameter ' rname ' is not present,前台返回400.又用另一种方式,request.getParameter("rname")来获得,同样发现,始终是null.

网上找了一些资料后,将后台代码修改如下,问题解决:

@ResponseBody

    @RequestMapping(value="/delete.do",produces = {"application/json;charset=utf-8"})

    public String deletenode(@RequestBodyString rname) throws GeneralException{

        SqlSession sqlsession = sqlsessionfactory.openSession();

这种方式可以接收参数,但是request.getParameter("rname")任然不行。

后来发现原因如下:

@RequestParam 底层是通过request.getParameter方式获得参数的,也就是说,@RequestParam 和 request.getParameter是同一回事。因为使用request.getParameter()方式获取参数,可以处理get 方式中queryString的值,也可以处理post方式中 body data的值,所以,@RequestParam可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST。

注意:

@RequestParam用来处理ContentType: 为 application/x-www-form-urlencoded编码的内容

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串。

@RequestBody和@RequestParam等注解的区别,可以看另一篇文章。

可以参考http://blog.csdn.net/mhmyqn/article/details/25561535这篇文文章,给了很多灵感。


http://www.niftyadmin.cn/n/1869983.html

相关文章

web编程基础——html

html 是什么:html标签 html 能做什么,怎么做: html 怎么运行:浏览器解析引擎和渲染引擎工作原理、http 协议 什么是 html html:hyper text markup language hyper:hyper high press er hi p er …

JS组件Bootstrap实现弹出框和提示框效果代码

前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编辑功能,一般常见的主要有两种处理方式:行内编辑和弹出框编辑。在增加用户体验方面,弹出框和提示框起着重要的作用&#xff…

web编程基础——javascript

javascript 是 netscape 公司的基于对象和事件驱动的编程语言 和 java 的不同之处: 1.所属公司不一样 java 是 sun 公司,现在是 oracle 公司,javascript 是 netscape 公司 2. js 是基于对象,java 是面向对象 3. js 是由浏览器…

js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?

没有区别。 你需要明白 IIFE 的原理,我简单说一下: 复制代码代码如下: function foo() {...} // 这是定义,Declaration;定义只是让解释器知道其存在,但是不会运行。 foo(); // 这是语句&#x…

黑马高薪学习方法

原文地址:http://bbs.itheima.com/forum.php?modviewthread&tid63387&extrapage%3D1 此文章是黑马老学员给新学员的学习建议,一个来自高薪学员的心声,望仔细耐心看完,这将是你在黑马学习的重要指南。 四个半月的时光转瞬…

AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式

HTTP请求中,如果是get请求,那么表单参数以namevalue&name1value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以namevalue&name1value1的形式在请求体中。通过chrome的开发者工具可以看…

JSP与SERVLET的关系

原文地址:http://blog.csdn.net/frank3g/article/details/4593426 综述:Java Servlet是JSP技术的基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。现在许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器&…

什么是 ant----编译打包工具 ant

原文地址:http://www.cnblogs.com/avenxia/archive/2011/12/08/2280701.html Apache Ant™ Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other. …