关于SpringMVC返回数据带斜杠字符串问题之解决方案
常用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这样可以避免出现这种情况。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – JSP / GlassFish:如何正确设置UTF-8编码
- java web实现自动登录功能
- form-data、x-www-form-urlencoded、raw、binary的区别
- java – LinkedHashMap vs HashMap,LinkedHashSet vs HashS
- java – Android Thread.start()CalledFromWrongThreadExce
- java – 通过codepoint读取文本流代码点
- java – JAXB将空列表映射到空集合?
- java – Vector vs SynchronizedList性能
- Java中获取刚插入数据库中的数据Id(主键,自动增长)
- 什么是RMI,什么是RPC,两者之间的区别是什么?