SpringMVC Ajax 获取参数的方法

使用SpringMVC时,前段使用Ajax方法是,遇到的问题是:POST方法时,后端无法获取参数值,通过@RequestBody转换成对象确可以,在网上也转悠了好多地方,不得其解,今天看到一个知识点,解决了这个“问题”。这里,打引号的意思是,这个问题并不是什么问题,而是参数使用的问题。具体一点是ajax请求的contentType的类型指定问题。
(1)如果后端采用@RequestParam或Request对象获取参数的方法,请不要指定contentType,或指定为:缺省值:application/x-www-form-urlencoded, 有网友表示AngularJS需要指定该值。
(2)如果后端采用@RequestBody来接受Javascript对象,那么请指定contentType为application/json.

SpringMVC获取从Javascript转Java对象的方法:
假设SpringMVC的配置文件配置了JSON的转换器,那么使用POST的Ajax调用是可以把一个JSON字符串转换成一个JAVA对象的。
后台的方法如下:

@RequestMapping(value = "setting/user/create", method = RequestMethod.POST)
@ResponseBody
public Map<String, String> showCreateForm(@RequestBody User model) {
    passwordHelper.encryptPassword(model);
    int ret = userService.addUser(model);
    Map<String, String> map = new HashMap<String, String>(1);
    map.put("ret", String.valueOf(ret));
    return map;
}

这段代码通过RequestMapping注解映射setting/user/create的URL,只处理POST请求,同时,响应数据体为一个对象,同时使用相应的Converter进行转换,笔者配置文件定义了JSON转换器,可以满足客服端的请求。
期望放回:{ret:Integer}的JSON对象。
前端JavaScript的方法如下:

$.ajax({
    type: 'POST',
    contentType: 'application/json',
    url: 'setting/user/create',
    data: JSON.stringify(user),
    success: adduser.addUserResponse,
    error:function(data){alert('error:' + data);}
});

通过ajax异步请求setting/user/create方法,参数类型使用’application/json’格式注意:这里参数类型为contentType,查看文档如下:
contentType
类型:String
默认值: “application/x-www-form-urlencoded”。发送信息至服务器时内容编码类型。
定义了发送到服务器的内容编码,如果是POST一个对象,这个方法是对的,如果是一个或多个普通参数,那么,就成了一个问题,该模式下,后端只能通过@RequestBody,并用对象来接受前端的参数,这也是笔记当时存在的错误。
需要添加的SpringMVC配置如下:

<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
    <bean id="mappingJacksonHttpMessageConverter"
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>


    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter" />   <!-- JSON转换器 -->
            </list>
        </property>
    </bean>

SpringMVC从前段获取简单对象的方法:

var userid = this.id.substr(this.id.lastIndexOf('-')+1);
$.ajax({
    type: 'POST',
    url: 'setting/user/delete',
    data:{id:userid},
    success: function(data){
        if (data && parseInt(data.ret)>0){
            showPromptMessage('btn-delete-user-'+userid, '删除用户成功.');
            $('#table-tr-user-' + data.ret).remove();
        }else{
            showPromptMessage('btn-delete-user-'+userid, '删除用户数据失败:' + data.message);
        }
    },
    error:function(data){alert('删除用户数据失败, error:' + data);}
});

这段代码没有了contentType参数,这样,{id:userid}这样的POST参数就会与URL编码参数类似:setting/user/delete?id=userid 的GET调用方式。可以通过@RequestParam参数获取id的值。注意:参数名称和提交的对象值需要一致,如果不一致,可以指定@RequestParam的构造函数为参数名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值