Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1230|回复: 0

[默认分类] 关于SpringMVC返回数据带斜杠字符串问题之解决方案

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-8-7 16:39:55 | 显示全部楼层 |阅读模式
    常用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配置文件加上如下内容解决:

    1. <!-- FastJson注入 -->
    2.     <mvc:annotation-driven>
    3.         <mvc:message-converters register-defaults="true">
    4.             <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
    5.             <!-- FastJson -->
    6.             <bean id="fastJsonHttpMessageConverter"
    7.                   class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
    8.                 <property name="supportedMediaTypes">
    9.                     <list>
    10.                         <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
    11.                         <value>text/html;charset=UTF-8</value>
    12.                         <value>application/json;charset=UTF-8</value>
    13.                     </list>
    14.                 </property>
    15.             </bean>
    16.         </mvc:message-converters>
    17.     </mvc:annotation-driven>
    复制代码


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

    1. <mvc:annotation-driven>
    2.         <mvc:message-converters>
    3.         <!-- 避免string类型直接解析成json-->
    4.             <bean class="org.springframework.http.converter.StringHttpMessageConverter" />
    5.             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    6.         </mvc:message-converters>
    7.     </mvc:annotation-driven>
    复制代码


      
    当然了,如果还出现这种情况的话,通常情况下可将返回值定为JSONObject或Object,而不是String,因为通过String的话,还需要调用JSONObject.toString()方法进进行转换。有的时候转换不起作用。
    当然了,即便出现这种情况也可以转换为json,比如使用jQuery的ajax方法交互,可通过eval进行转义或者JSON.parse,将普通字符串转为JSON格式字符串。另外还有一个要简单说明下,就是如果是返回中文乱码问题,注意要在对应的方法上加上这么一句produces="application/json;charset=utf-8",即可解决乱码问题
    如果是安卓,记得有一次我遇到这种情况,也是给他提供接口的时候,突然返回是带斜杠的字符串。他是通过replace方法进行替换解决的。不过个人建议,如果遇到这种情况的话,可以使用返回值为JSONObject这样可以避免出现这种情况。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-24 20:09 , Processed in 0.332741 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表