关于SpringMVC返回数据带斜杠字符串问题之解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于SpringMVC返回数据带斜杠字符串问题之解决⽅案
常⽤SpringMVC的基本都知道,@RestController和@ResponseBody加上了都会返回json数据。
它们的区别主要是注解⽅⾯,⼀个是类级别的⼀个是⽅法级别。
之前我们⽐较喜欢使⽤@ResponseBody,后来觉得重复性太多了,特别是使⽤swagger以后,⼀个⽅法上⾯关注解就上了4到5层,为了减少这些繁杂的过程,我们就采取简洁策略,因为都是基于前后端分离开发,前端展⽰也不打算使⽤诸如jsp、freemarke、volocity等模板语⾔。
直接上⼿html,当然主要是以ajax的⽅式进⾏交互。
先列举这么⼏个情况?通常情况下,类上⾯有对应的RestController注解或者是你的类上是@Controller注解,并在每个⽅法上⾯加上
@ResponseBody。
正常是应该返回JSON数据的。
通过POSTMAN测试或者Jmeter。
关于@RestController和@ResponseBody源码解析可以参考我的这篇⽂章:
当然有的时候没有返回的话,根据你使⽤⽽定⽐如使⽤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这样可以避免出现这种情况。