背景:在微信支付,接收微信付款结果通知,一次通知,接收了好多次。这说明:微信支付系统没接收到正确的响应码。
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
分析:
在使用@RequestMapping后,返回值通常解析为跳转路径。
加上@responsebody后,返回结果直接写入HTTP response body中,不会被解析为跳转路径。
比如异步请求,希望响应的结果是json数据,那么加上@responsebody后,
就会直接返回json数据。
也就验证了:springmvc可以返回json,也可以返回单独的string,也可能返回的string对应的是一个资源路径
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 避免string类型直接解析成json-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<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>
<property name="objectMapper">
<!-- <bean class="com.ultimate.cms.core.base.ObjectMappingCustomer"
/> -->
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
解决办法:
<!-- 避免string类型直接解析成json-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />