$.ajax()post方式请求参数无法传递,request.getParameter()无法获取

$.ajax()post方式请求参数无法传递,request.getParameter()无法获取

 

在前台页面中

$.ajax({

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

                    data : {"rname":rname},

                    type : "post",

                    dataType:"text",

content-type: "application/json",

                    success : function(data) {

                     alert("data");

                    },

error:function(XMLHttpRequest, textStatus, errorThrown){

alert(errorThrown);

}

                });

在后台中,用java+spring mvc

@ResponseBody

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

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

        SqlSession sqlsession = sqlsessionfactory.openSession();

        try {

            RedisClusterDao dao = sqlsession.getMapper(RedisClusterDao.class);

            dao.deletenode(rname);

        } catch (Exception e) {

            log.error(e.getMessage(), e);

        } finally {

            sqlsession.close();

        }

        log.info("delete 集群:{}", rname);

        return"OK";

    }

 

特别注意,这里我用的是@RequestParam接收。

 

运行后,提示String parameter ' rname ' is not present。即:后台接收不到前台传递的rname参数。考虑到可能是spring mvc在接受参数时出现问题,所以,将deletenode(@RequestParam("rname")String rname)方法修改成deletenode(HttpServletRequest request),然后在后台中又用request.getParameter("rname")的方式取数,结果一直显示null.

将ajax的type参数改成get,别的不变,结果,两中方式都可以正常的接收。

 

用chrome浏览器,可以看到get方式的请求

这里正常的显示参数。

 

post方式contenttype设置成applicatio/json时:

浏览器提示400,Required String parameter 'rname' is not present.

 

Post方式contenttype不设置成application/json的request header如下:

当我们的content-type是application/x-www-form-urlencoded的时候,前台传递的参数是可以传到后台的@RequestParam和request.getParameter都可以,事实上,这两种都是一样的,但是当我再前台设置的content-type是application/json的时候,后台就无法接收到参数,两种都不行。

 

如果是二进制数据传输,像文件上传等,需要设置content-Type multipart/form-data.

 

特别注意:

ajax传JSON时设置的contenttype 如果是application/json或者text/json时,JAVA中request.getParameter("")怎么也接收不到数据。这是因为,Tomcat的HttpServletRequest类的实现类为org.apache.catalina.connector.Request(实际上是org.apache.coyote.Request)

post请求不是application/x-www-form-urlencoded的,全部直接返回,不作处理,即不会解析表单数据来放到request parameter map中。所以通过request.getParameter(name)是获取不到的。只能使用最原始的方式,读取输入流来获取。

 

无论是在spring mvc中,还是再struts中,都是一样的。contentType : "application/json"的时候,用post方式提交数据,后台request.getParameter方法接收到的始终是null.

 

那么,ajax post方式contenttype设置成applicatio/json时,在后台到底有没有办法接收传递的参数呢?肯定是有的,可以看看我的另一篇文章:ajax post方式contenttype设置成applicatio/json时 spring mvc接收参数

--------------------- 本文来自 大神起步 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/g1248019684/article/details/50850384?utm_source=copy

来源:网络


智能推荐

HttpClient请求接口@RequestBody无法获取参数

HttpClient请求接口@RequestBody无法获取参数 接口案例: 如图所示JSON.parseObject(jsonParam),后台报空指针, 原因: HttpClientUtil的post请求没有增加Content-type=application/json,HttpPost默认用的是application/x-www-form-urlencoded, 解决办法: 在工具类的请求头...

request.getParameter("key")拿不到值的问题

今天在写一个form表单的时候,提交到后台之后发现使用request.getParameter()拿到的值全部为null 错误原因是这个form表单中有一个文件(图片)上传的项,form表单中有一个属性enctype="multipart/form-data"。 查了一下这个属性 此时用request是拿不到这个值的,因为这个表单是基于流的方式提交的。 此时需要导入下面三个依赖...

【JavaWeb】理解request.getParameter()的一些细节

先捋一下图中这个登录的逻辑: 表单中的登录按钮的action属性绑定了一个servlet的路径,当点击登录时,可以看到网页的地址栏会跳转到一个servlet,后台程序执行了这个servlet的代码。 这个servlet中,我们可以用request.getParameter();来获取表单中填写的用户名、密码、验证码,然后再进行查询数据库中是否有这个用户,如果有则登录成功,否则登录失败。 然后是我们...

IDEA中request.getParameter爆红-解决办法

发现我们的request.getParamaeter 爆红 原因是我们的项目中没有导入jar包。 我们导入Tomcat 的 jar 包即可。 我们Apply -> OK 导入jar包成功 不再爆红 解决成功!!!...

IDEA:jsp中request.getParameter爆红问题

问题:jsp中request.getParameter爆红,如下图: 解决方法: 1. 2.其中第2步是正在使用的meaven项目 3. 4. 5.然后点击Apply,再点击OK即可。可能要等IDEA反应会才可以看到结果。...

猜你喜欢

IDEA 关于request.getParameter() 爆红问题

在用idea 里面用到request.get...()一系列函数时,出现了爆红的问题 于是在网上找了好久,几乎全是关于如何把tomcat 的lib文件夹下的jsp-api.jar和servlet-api.jar文件通过Libraries导入jar包的解决方法。 但是,几乎试遍所有导入方法依旧没有效果。 在绝望之时看到了这篇文章:https://blog.csdn.net/cunfen3485/ar...

flex布局居中无效果注意是否设置了宽度

View 是flex布局;JDTouchable是flex:1;设置居中,  里面的两个View必须提供宽度,才能居中!...

mysql查询语句6:子查询

说明:当一个查询语句中又嵌套了另一个完整的select语句,则被嵌套的select语句称为子查询或内查询。外面的select语句称为主查询或外查询。 注:子查询不一定必须出现在select语句内部,只是出现在select语句内部的情况较多。 分类: 按子查询出现的位置进行分类: 1、select后面 要求:子查询的结果为单行单列(标量子查询) 2、from后面 要求:子查询的结果可以为多行多列 3...

go get被墙、速度太慢、没有反应以及go get下载的包无法导入的解决方案

go get被墙、速度太慢、没有反应的解决方案以及go get下载的包无法导入 由于国内网络的特殊环境,当我们在命令行中使用go get去获取第三方的库时,大概率没有任何反应,好在国内有一些代理,能够顺利解决这个问题,比如 Goproxy中国或者goproxy.io,具体操作在这两个网站里都有详细讲解,这里不在赘述,只是简单说说一些初学者在配置好代理之后可能遇到的坑。 首先就是,可能会有不少人发现...

配置HSRP

HSRP:热备份路由器协议(HSRP:Hot Standby Router Protocol),是cisco平台一种特有的技术,是cisco的私有协议。 原理:负责转发数据包的路由器称之为活动路由器(Active Router)。一旦主动路由器出现故障,HSRP 将**备份路由器(Standby Routers)取代主动路由器。HSRP 协议提供了一种决定使用主动路由器还是备份路由器的机制,并指定...

问答精选

How can I use SET in MYSQL to combine 2 values?

I wanted to SET a value into a VARCHAR but I don't understand how to combine it. Somehow I am losing the textpart "This is a test". Is this normal behaviour for MySQL, am I doing something w...

How to find the center in unity 2d?

I want to create 2d game. The game is similar to the Scale Puzzle. I've already created nearly all the functionality. Only the last remains. . This is example. And that's how I draw shapes. . I click ...

PHP question on how to display data?

How can I accomplish the following. For example lets say I already have a template that checks to see if the user has entered a link if not it will not display the link template if so display the link...

Allow match - special characters should only appear once in a row

I have a regex that cleans string of all unwanted characters. Allowed characters (matches) are A-Z a-z 0-9 - and / What i have so far works like it should: The only thing i cannot achieve is that - sh...

How to delete sheet from an existing excel file using JExel

I am trying to delete sheet from an existing excel file. can any one suggest how to do that. It depends what you're trying to achieve. Brute force method: the never Excel file format (*.XLSX) is just ...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答