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
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。