页面越来越到的采用异步加载数据,现在异步加载数据最流行的是将数据转换为json返回到页面后再做处理,页面上使用Jquery可以很方便的对JSON数据做处理,现在整理下常用的返回JSON数据的方法:
直接将数据放到输出流中:
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
JSONObject json = new JSONObject();
try {
json.put("test","test");
response.getWriter().print(json.toString());
} catch (IOException e) {
e.printStackTrace();
}
在spring MVC中输出JSON数据:
@RequestMapping(value = "/searchList")
public @ResponseBody List searchList(ModelMap model,HttpServletRequest requerst,
HttpServletResponse response){
List<Product> productList = null;
try {
productList = productService.searchProductList();
} catch (Exception e) {
e.printStackTrace();
}
return productList;
}
Spring MVC为了保证返回数据编码的统一需要在xml文件中增加配置:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list >
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
针对有时候需要跨域请求,可以通过JSONP的方式,这个时候可以通过在springXML文件中配置支持的数据格式完成:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1"/>
<property name="favorPathExtension" value="true"/>
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
<entry key="jsonp" value="application/javascript"/>
<!-- <entry key="xml" value="application/xml" /> -->
</map>
</property>
<!-- 设置为true以忽略对Accept Header的支持-->
<property name="defaultContentType" value="application/json"></property>
<property name="defaultViews">
<list>
<bean class="com.gochinatv.api.util.CustomMappingJacksonJsonView">
<property name="disableCaching" value="false"/>
</bean>
<bean class="com.gochinatv.api.util.CustomMappingJacksonJsonpView"/>
</list>
</property>
</bean>