关于SpringMVC返回数据带斜杠字符串问题之解决方案

匿名 (未验证) 提交于 2019-12-03 00:43:02

常用SpringMVC的基本都知道,@RestController和@ResponseBody加上了都会返回json数据。它们的区别主要是注解方面,一个是类级别的一个是方法级别。

之前我们比较喜欢使用@ResponseBody,后来觉得重复性太多了,特别是使用swagger以后,一个方法上面关注解就上了4到5层,为了减少这些繁杂的过程,我们就采取简洁策略,因为都是基于前后端分离开发,前端展示也不打算使用诸如jsp、freemarke、volocity等模板语言。直接上手html,当然主要是以ajax的方式进行交互。

先列举这么几个情况?通常情况下,类上面有对应的RestController注解或者是你的类上是@Controller注解,并在每个方法上面加上@ResponseBody。正常是应该返回JSON数据的。通过POSTMAN测试或者Jmeter。

关于@RestController和@ResponseBody源码解析可以参考我的这篇文章:前后端交互之封装Ajax+SpringMVC源码分析

当然有的时候没有返回的话,根据你使用而定比如使用FastJSON却没有返回对应的JSON数据,可通过在SpringMVC配置文件加上如下内容解决:

 <!-- FastJson注入 -->     <mvc:annotation-driven>         <mvc:message-converters register-defaults="true">             <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->             <!-- FastJson -->             <bean id="fastJsonHttpMessageConverter"                   class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">                 <property name="supportedMediaTypes">                     <list>                         <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->                         <value>text/html;charset=UTF-8</value>                         <value>application/json;charset=UTF-8</value>                     </list>                 </property>             </bean>         </mvc:message-converters>     </mvc:annotation-driven> 

如果是jackjson,可通过在SpringMVC的配置文件加上如下内容解决:

<mvc:annotation-driven>         <mvc:message-converters>         <!-- 避免string类型直接解析成json-->             <bean class="org.springframework.http.converter.StringHttpMessageConverter" />             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>         </mvc:message-converters>     </mvc:annotation-driven>

当然了,如果还出现这种情况的话,通常情况下可将返回值定为JSONObject或Object,而不是String,因为通过String的话,还需要调用JSONObject.toString()方法进进行转换。有的时候转换不起作用。

当然了,即便出现这种情况也可以转换为json,比如使用jQuery的ajax方法交互,可通过eval进行转义或者JSON.parse,将普通字符串转为JSON格式字符串。另外还有一个要简单说明下,就是如果是返回中文乱码问题,注意要在对应的方法上加上这么一句produces="application/json;charset=utf-8",即可解决乱码问题

如果是安卓,记得有一次我遇到这种情况,也是给他提供接口的时候,突然返回是带斜杠的字符串。他是通过replace方法进行替换解决的。不过个人建议,如果遇到这种情况的话,可以使用返回值为JSONObject这样可以避免出现这种情况。

原文:https://www.cnblogs.com/youcong/p/9347675.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!