Resolved exception caused by handler execution: org.springframework.http.converter.HttpMessageNotRea

【springboot】前端ajax 传递 json 对象出现的错误,后端使用@RequestBody 接收参数对 并绑定到对象上: 错误信息如下

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by handler execution: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('%' (code 37)): expected a valid value (number, String, array, object, 'true', 'false' or 'null'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('%' (code 37)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: (PushbackInputStream); line: 1, column: 2]
2019-01-26 18:48:59.531  INFO 7468 --- [io-8083-exec-13] c
  • 产生原因分析:
    在SpringMVC环境中, @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType:
    “json”,contentType:"application/json"这样就可以轻易的将一个对象传到Java端,使用@RequestBody即可绑定对象;解决方式如下
  • 我的前端代码如下
function addSysDict(obj) {

     var url = $(obj).attr("href");
    var params = ["nameDict","typeDict","valueDict","codeDict","remarkDict"];
    var data ={};
    for(var i=0;i<params.length;i++){
        var val = $("#"+params[i]).val();
        /*这里不需要拼接"key":"valus" 这种格式 */
       /* data['"'+params[i].substring(0,params[i].length-4)+'"']=val;*/
       // 正确处理
        data[params[i].substring(0,params[i].length-4)]=val;
    }
    console.log(data);
    // 将json 对象 转成 json 字符串
    var param = JSON.stringify(data);
    $.ajax({
        "url":url,
        "type":"POST",
        "data":param,
        "contentType":'application/json',
        success:function(data){
            console.log(data);
        alert("request success ! ");

    }
});
}
  • 后端接收请求代码
@PostMapping("sysDictAdd")
    @ApiOperation("新增数据字典")
    public ModelAndView sysDictAdd(@RequestParam(value = "viewName",required = false,
            defaultValue = "/pages/sysDict/sysDictAdd.html" ) String viewName,
                                   ModelAndView mv,
                                  @RequestBody SysDictEntity sysDictEntity){

        log.info(sysDictEntity.getName()+".."+sysDictEntity.getRemark());
        return  null;
    }
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值