大数据学习_Spring传接Json对象字符串

1. 前言

1.1 需求

  又一次写ajax请求,后台总是接收null,问题原因是Json格式没缕清,此篇文章好好整理下。
  此块的需求如下:
  实现网页端基于ajax请求发送页面input标签中的一个字符给后端控制层,控制层拿到数据调用方法后返回一个对象给前端,前端接收到对象后执行业务响应。


前端获取界面


在这里插入图片描述


在这里插入图片描述


1.2 实现

  贴上成功代码:

// 1.前端为input绑定一个change事件函数,内容改变时发送POST类型的ajax请求
<script>
        $("#dep_id").change(function () {
            var dep_id = $("#dep_id").val();
            let url = '${pageContext.request.contextPath}/department/findById';
            $.ajax({
                type: 'POST',
                url: url,
                data:{"dep_id":dep_id},    
                dataType : "json",
                //成功响应的结果
                success : function (resp) {...}                              
            })
        })
    </script>
// 2.后端接收dep_id并调用业务层方法
// 这里是基于id属性对数据库进行查询,返回查询到的department
@Controller
@RequestMapping("/department")
public class DepartmentController {

    @Autowired
    private DepartmentService departmentService;

    @RequestMapping("/findById")
    @ResponseBody
    public Department findById(Integer dep_id) {
        //System.out.println(dep_id);
        Department department = departmentService.findById(dep_id);
        if(null==department){
            department = new Department();
        }
        return department;
    }
}

2. Ajax发送请求中的Json格式

  首先回顾一下Ajax:Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。即无需重新加载整个网页,便能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,使网页实现异步更新。

2.1 jQuery封装后的ajax

  jQuery对js原生的ajax进行了封装,封装后的ajax的操作方法更简洁,功能更强大,与ajax操作相关的jquery方法有:

请求方式语法
GET请求$.get(url, [data], [callback], [type])
POST请求$.post(url, [data], [callback], [type])
AJAX请求$.ajax([settings])

  AJAX请求常用属性:

属性名称解释
url请求的服务器端url地址
async(默认: true) 默认所有请求均为异步请求。如要发送同步请求,设置为false
data发送到服务器的数据,可以是键值对形式,也可以是js对象形式
type(默认: “GET”) 请求方式 (“POST” 或 “GET”)
contentType发送数据到服务器时所使用的内容类型。默认是:“application/x-www-form-urlencoded”
dataType预期的返回数据的类型,取值可以是 xml, html, script, json, text, _defaul等
success请求成功后的回调函数
error请求失败时调用此函数

contentType在这里尤为重要:

<script>
        $("#btn1").click(function () {
            let url = '${pageContext.request.contextPath}/user/ajaxRequest';
            let data = {"id":1,"username":"张三"};
            $.ajax({
                type: 'POST',
                url: url,
                data : data,
                //contentType : 'application/json;charset=utf-8',
                success: function (resp) {
                    alert(JSON.stringify(resp));
                }
            })
        })
</script>
  • 当不指定contentType,使用默认值时:
    在这里插入图片描述
      此时请求体数据以标准的Form Data形式提交,多个数据间以&符号拼接,参数格式为key1=value1&key2=value2&…
    在这种情况多用于传输简单的数据,基于ssm开发时后台可以直接接收该数据,不需要在形参前添加 @RequestBody。
      比如传输 data = {“id”:1,“username”:“张三”}; 后台可以使用形参int id(此时形参名必须要等于想接收参数的key名)来接收data中的id值;其次也可以使用实体类对象来接收整个data,比如User user(User类中要具备id和username属性,类中必须提供key值的get/set方法),这里好像mvc还是基于get/set方法去将接收到的data封装成类对象,如果类中有其他属性会自动设置为默认值。

  • 当指定contentType : "application/json;charset=UTF-8"时:
    在这里插入图片描述
      如果设置了contentType,请求体数据以Request Payload形式提交,ssm后台接收时必须在形参类型前使用@RequestBody注解,不使用注解后台没法对实体进行封装,会返回全部属性为null的对象。
    注意:
      这里可能会报JSON parse error:Unrecognized token ‘xx’ ,此时说明传参的格式不正确,通过data : JSON.stringify(data)可以解决,内部过程就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象。
      如果报了JSON parse error: Cannot deserialize instance of …,此时说明接收类不支持反序列化,该一定不是pojo类,则需要修改接收类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值