SpringMVC使用注解@RequestBody获取AJAX中的JSON对象报错解决方案

首先,我们来看一下@RequestBody在JSON格式中使用时需要注意的点(一定要区分开@RequestParam):

 因此,当前端使用Ajax传入JSON对象到controller层的时候,一定要注意这两个键值对 contentType 和 dataType,并要求在data栏目中要定义的是一个JSON字符串的形式,其原因是因为@RequestBody是将我们前端传过来的JSON字符串通过转换为JSON格式,然后再将其转换为实体类映射到我们的参数列表对象中去,这里一定要注意使用的是JSON字符串的格式:

               $.ajax({
                    //编写JSON格式,设置属性和值
                    url : "userController/testAjax",
                    contentType : "application/json;charset=UTF-8",
                    data : '{"username":"yangshiwen","password":"123456","age":30}',
                    dataType : "json",
                    type : "post",
                    success : function (data) {

                        //data是指服务器端响应的json数据,进行解析
                        alert(data);
                        alert(data.username);
                        alert(data.password);
                        alert(data.age);

                    }
                });

然后,在controller层分别使用 :

@ResponseBody,返回一个对象给Ajax中的success函数。

@RequestBody,获取Ajax传过来的JSON字符串转换为对象映射为User实体类。

    /**
     * 模拟异步请求刷新
     */
    @RequestMapping(value = "/testAjax")
    @ResponseBody
    //这里因为导入了jackSon,所以直接用user接收就行了
    public User testAjax(@RequestBody User user){
        System.out.println("testAjax测试方法执行了");

        //客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中去了
        System.out.println(user);

        //做响应,模拟查询数据库,这里重新更新了user
        user.setUsername("hahaha");
        user.setAge(50);
        user.setPassword("123456");

        //做出响应
        return user;
    }

----------------------------------------

如果我们不想使用 @RequestBody 注解的话,就要使用标准的JSON格式:

                $.ajax({
                    //编写JSON格式,设置属性和值
                    url : "userController/testAjax",
                    data : {"username":"yangshiwen","password":"123456","age":30},
                    type : "post",
                    success : function (data) {

                        //data是指服务器端响应的json数据,进行解析
                        alert(data);
                        alert(data.username);
                        alert(data.password);
                        alert(data.age);

                    }
                });

其controller层代码如下:

    /**
     * 模拟异步请求刷新
     */
    @RequestMapping(value = "/testAjax")
    @ResponseBody
    //这里因为导入了jackSon,所以直接用user接收就行了
    public User testAjax(User user){
        System.out.println("testAjax测试方法执行了");

        //客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中去了
        System.out.println(user);

        //做响应,模拟查询数据库,这里重新更新了user
        user.setUsername("hahaha");
        user.setAge(50);
        user.setPassword("123456");

        //做出响应
        return user;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值