Java API接口返回不是JSON的解决方案,SpringMVC返回JSON配置。
前几天遇到个问题,在 Java 给IOS ,Android 提供的API 接口的时候,IOS 接收到的是IO 流信息。而 Java 和Android 使用木有任何问题,仔细的观察发现了蹊跷。如图。
如果Content-Type 是非 application/json 的都有问题,虽然小部分也是可以的,但是application/json 才是真的没问题。
个人的理解为什么 Java 、Android 可以,而IOS 不行呢, Java 、Android 在读取接口数据的时候首先框架上会有多方面的处理,其次我发现 Java 和Android 好像浏览器一样,先是识别的数据,根据数据类识别类型,而不是优先根据文件的返回类型(Content-Type )来决定的。
——这只是个猜测。别认真
下面我针对SpringMVC 来说说配置解决。在我们的SpringMVC 配置文件中,也就是一般命名为spring-mvc.xml 中配置如下:
<!-- 这个一定得有,注意了,如果其他配置也有需要这个,已经配置了,那不必了 -->
<mvc:annotation-driven />
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<!--json转换器-->
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
<bean class="org.springframework.http.MediaType">
<constructor-arg index="0" value="text"/>
<constructor-arg index="1" value="plain"/>
<constructor-arg index="2" value="UTF-8"/>
</bean>
<bean class="org.springframework.http.MediaType">
<constructor-arg index="0" value="*"/>
<constructor-arg index="1" value="*"/>
<constructor-arg index="2" value="UTF-8"/>
</bean>
<bean class="org.springframework.http.MediaType">
<constructor-arg index="0" value="text"/>
<constructor-arg index="1" value="*"/>
<constructor-arg index="2" value="UTF-8"/>
</bean>
<bean class="org.springframework.http.MediaType">
<constructor-arg index="0" value="application"/>
<constructor-arg index="1" value="json"/>
<constructor-arg index="2" value="UTF-8"/>
</bean>
</list>
</property>
</bean> 配置后返回如图:
这就是OK了,不管怎么用都是 JSON 了,除非你接收的时候,你是用Text 类型的接收。
如果是其他框架,请用httpResponse 输出的时候,指定Content-Type 为 application/json 即可。
有问题加群交流。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/124.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。
