JSON.stringify()之转义符(反斜杠)解决办法 |
您所在的位置:网站首页 › post返回值不带引号 › JSON.stringify()之转义符(反斜杠)解决办法 |
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,果然不出我所料,报错信息所指的就是这玩意儿(转义符)。 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 |