spring mvc自动封装前端发送的json数据绑定为指定对象

本文介绍了Spring MVC如何自动将前端jQuery发送的JSON数据转换并封装为后台的对象。重点强调了前端发送JSON数据时需使用JSON.stringify()转换,并设置contentType,以及后台使用@RequestBody注解的重要性。同时,探讨了Spring MVC利用FastJsonHttpMessageConverter进行数据绑定的原理,包括配置FastJson并在读取请求时解析JSON内容转换为目标对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题场景

在前端用jQuery向后台发送json数据,然后在后台收到封装好的对象

2.代码示例

前端

$.ajax({
    url:"XXXX",
    data:JSON.stringify(user),//user是一个json数据
    type:"XXX",
    contentType: "application/json;charse=UTF-8",
    success:function (data) {

    },
    error:function (err) {

    }
});

注意

1.json数据必须用JSON.stringify()方法转换成字符串

2.contentType不能省略

后台

@RequestMapping(value = "xxxxx",method = RequestMethod.XXX)
@ResponseBody
public Msg methodName(@RequestBody User user) {
    logger.info("user:"+user);
    return Msg.success();
}

注意

@RequestBody不可以省略

3.spring mvc封装json数据的原理分析

首先通过@RequestBody表明这个方法的参数应该被request的body绑定,即我们从前端传过去的json数据。而这个转换器就是:org.springframework.http.converter.HttpMessageConverter的一个实现类。在这里用的是阿里的fastjson来取代spring默认的Jackson进行数据绑定。(用fastjson最直观的优势就是如果属性为空就不会将其转化为json,数据会简洁很多)

第一步:在mvc配置文件中配置fastjson

<mvc:annotation-driven>

    <mvc:message-converters>
        <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"/>
    </mvc:message-converters>

</mvc:annotation-driven>

第二步:断点追踪请求的处理过程

请求在com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4#readInternal方法中进行处理。读取了请求的body内容,然后通过JSON.parseObject返回目标对象

protected Object readInternal(Class<? extends Object> clazz, //
                              HttpInputMessage inputMessage //
) throws IOException, HttpMessageNotReadableException {

    InputStream in = inputMessage.getBody();
    return JSON.parseObject(in, fastJsonConfig.getCharset(), clazz, fastJsonConfig.getFeatures());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值