JSON.stringify()之转义符(反斜杠)解决办法

您所在的位置:网站首页 post返回值不带引号 JSON.stringify()之转义符(反斜杠)解决办法

JSON.stringify()之转义符(反斜杠)解决办法

2023-08-24 06:30| 来源: 网络整理| 查看: 265

JSON.stringify()出现转义符无法发送请求到后端的解决方法 话不多说,直接上报错代码。 16:10:43.326 [http-nio-8888-exec-23] ERROR com.platform.utils.RRExceptionHandler - JSON parse error: Unexpected character ('\' (code 92)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('\' (code 92)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 1, column: 247] org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('\' (code 92)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('\' (code 92)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 1, column: 247] at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:245) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:227) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:204) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130) at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126) at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at java.lang.Thread.run(Thread.java:748) Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('\' (code 92)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 1, column: 247] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1804) at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:693) at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:591) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextFieldName(UTF8StreamJsonParser.java:986) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:376) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3084) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:239) ... 81 common frames omitted

从报错信息来看是json转换格式的异常,OK,找到前端转换json的代码。继续上代码。。。

let url = vm.goods.id == null ? "../goods/save" : "../goods/update"; vm.goods.goodsDesc = $('#goodsDesc').editable('getHTML'); vm.goods.goodsImgList = vm.uploadList; Ajax.request({ type: "POST", url: url, contentType: "application/json", params: JSON.stringify(vm.goods), successCallback: function (r) { alert('操作成功', function (index) { vm.reload(); }); } });

嗯哼,params是用JSON.stringify()格式化的,基本可以确定是它的问题了。下一步,打印参数验证,为了更直观的看见参数,我舍弃了alert,用console.log(); 等待两秒,1秒、2秒,duang,果然不出我所料,报错信息所指的就是这玩意儿(转义符)。 转载请注明出处 emmmm…想办法解决吧。简单思考了几种方法,算了,先百度吧。 百度结果:1、消除转义符。2、改变发送请求类型。3、自己想办法解决。脑子懒,先试试消除转义符。上代码:

let s = JSON.stringify(vm.goods).replace(/[\\]/g,'');

duang不出我所料,又报错了。。。

ERROR com.platform.utils.RRExceptionHandler - JSON parse error: Unexpected character ('h' (code 104)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('h' (code 104)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 1, column: 247] org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('h' (code 104)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('h' (code 104)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 1, column: 247]

emmmmm…抱着不可能的想法试试第二种方法。。。 嗯?好像也没什么类型可换。 emmmmmm…contentType好像少了点什么,诶,不对啊。contentType主要设置我发送给服务器的格式,我后端设置的断点并没有被触发,也就是后端并没有接收到我前端的请求。contentType的默认值是application/x-www-form-urlencoded,但是默认的值只能对键值这样组织的情况下是没有什么问题的,这里说的一般是,不带嵌套类型JSON,也就是 简单的JSON。

{ a:1, b:2 }

但是我发送的是一个复杂嵌套类型:

{ data: { a: [{ b: 1 }] } }

所以我用了自定义数据类型application/json,这。。。是不是忘了加编码格式了?带着疑问我浏览了contentType的原文介绍:

contentType中(默认:‘application/x-www-form-urlencoded; charset=UTF-8’) 类型:布尔值或字符串 将数据发送到服务器时,请使用此内容类型。默认为“application / x-www-form-urlencoded; charset = UTF-8”,这在大多数情况下都适用。如果您明确地将内容类型传入$.ajax(),则始终将其发送到服务器(即使没有数据发送)。从jQuery 1.6开始,您可以传递false告诉jQuery不设置任何内容类型标头。 注意: W3C XMLHttpRequest规范规定字符集始终为UTF-8; 指定另一个字符集不会强制浏览器更改编码。注意:对于跨域请求,将内容类型设置为除application/x-www-form-urlencoded,之外的任何内容multipart/form-data,或者text/plain将触发浏览器向服务器发送预检OPTIONS请求。

加上编码格式后:

let url = vm.goods.id == null ? "../goods/save" : "../goods/update"; vm.goods.goodsDesc = $('#goodsDesc').editable('getHTML'); vm.goods.goodsImgList = vm.uploadList; Ajax.request({ type: "POST", url: url, contentType: "application/json;charset-utf-8", params: eval1, successCallback: function (r) { alert('操作成功', function (index) { vm.reload(); }); } });

启动,激动的心,颤抖的手,duang! 转载请注明出处

问题解决。。。

本文简单记载我开发过程遇到的一个小问题,有兴趣的童鞋可以自己翻阅相关资料以更深入理解这个问题的所在。本文仅代表个人观点,如有错误地方请提出宝贵建议,以便交流学习。 转载请注明出处



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3