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

首先配置springmvc

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

因为我用的是fastjson,好用一点
前端ajax请求

var params1 = {"marketPrice":m,"price":p,"stock":s,"upperLimit":u,"deliveFee":f,"id":skuId};
//var params2= '{"marketPrice":'+m+' ,"price": '+p+' ,"stock": '+s+' ,"upperLimit": '+u+' ,"deliveFee": '+f+' ,"id": '+skuId+' }';这是手动拼的json串
var data = JSON.stringify(params1);//这部也重要,将json对象转换为json字符串
$.ajax({
          url:url,
          type : "POST",
          data:data,
          dataType: 'json',
          contentType:'application/json;charset=UTF-8', //contentType很重要
          success : function(result) {
              console.log(result);
          }
})

contentType必须有,不然console会报415错误
后端写法:利用@RequestBody注解,将接收到的json数据绑定为指定对象

public void updateSku(@RequestBody Sku sku, HttpServletResponse response) throws IOException {
        String message = null;
        try{
            int i = skuService.updateSkuById(sku);
            message = "保存成功";
        }catch(Exception e){
            e.printStackTrace();
            message = "保存失败";
        }
        JSONObject jo = new JSONObject();
        jo.put("message",message);
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(jo.toString());
    }

spring mvc封装json数据的原理分析
首先通过@RequestBody表明这个方法的参数应该被request的body绑定,即我们从前端传过去的json数据。而这个转换器就是:org.springframework.http.converter.HttpMessageConverter的一个实现类。在这里用的是阿里的fastjson来取代spring默认的Jackson进行数据绑定。(用fastjson最直观的优势就是如果属性为空就不会将其转化为json,数据会简洁很多)
第二步:断点追踪请求的处理过程
请求在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());
}

文章参考:

https://blog.csdn.net/HelloWorld20151118/article/details/77104047
https://blog.csdn.net/yixiaoping/article/details/45281721

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值