第一种方式,使用springMVC内置的json支持
1.首先导入jackson的两个包jackson-core-lgpl-1.2.1.jar和jackson-mapper-lgpl-1.2.1.jar,后面附上了这两个包,可以下载。
2.配置springMVC的配置文件
<!--<mvc:annotation-driven/> -->
<!-- 这样配置的目地是了支持json数据的转换 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list id="beanList">
<ref bean="mappingJacksonHttpMessageConverter"/>
</util: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>3.前台Ext请求数据
var schemaEnNameStore = new Ext.data.Store({
proxy : new Ext.data.HttpProxy({
url : '/ext_project/metaTable.action?method=querySchemaEnName',
type : 'ajax'
}),
reader : new Ext.data.JsonReader({
root : 'root',
type : 'json'
}, [{
name : 'schemaEnName',mapping:'param'
}]),
autoLoad : false
});4.后台controller处理并返回数据
@RequestMapping(params = "method=querySchemaEnName")
@ResponseBody
public Object handleQuerySchemaEnName() {
try {
List<ParamDto> schemaEnNameList = metaTableService.querySchemaEnNameTotal();
Map<String,Object> map = new HashMap();
map.put("root", schemaEnNameList);
map.put("success", true);
return map;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}第二中方式,比较简单和原始
1.前台请求数据
var tableEnNameStore = new Ext.data.JsonStore({
url : '/ext_project/metaTable.action?method=queryTableEnName',
root : 'root',
fields : [{
name : 'tableEnName',mapping:'param'
}],
autoLoad : false
})2.后台处理并返回,使用JSONObject
@RequestMapping(params = "method=queryTableEnName")
public void handleQueryTableEnName(HttpServletRequest req,HttpServletResponse response){
try{
String schemaEnName = req.getParameter("schemaEnName");
List<String> list = metaTableService.queryTableEnNameBySchEnName(schemaEnName);
List<ParamDto> tableEnNameList = new ArrayList();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
ParamDto pDto = new ParamDto();
pDto.setParam((String)iterator.next());
tableEnNameList.add(pDto);
}
Map<String,Object> map = new HashMap();
map.put("root",tableEnNameList);
map.put("success", true);
JSONObject obj = JSONObject.fromObject(map);
PrintWriter writer = response.getWriter();
writer.print(obj.toString());
}catch(Exception e){
e.printStackTrace();
}
}第三种方式
springMVC的MappingJacksonJsonView借助Jackson框架的ObjectMapper将模型数据转换为JSON格式输出,由于MappingJacksonJsonView也是一个bean,可以通过BeanNameViewResolver进行解析,因此须在配置文件中配置:
bean id="userListJson" calss="org.springframework.web.servlet.view.json.MappingJacksonJsonView" p:renderedAttributes="userList"/>
默认情况下,MappingJacksonJsoView会将所有的数据都输出为json,这显然是不合适的,你可以通过renderedAttributes指定模型中哪些属性需要输出。
在controller中添加一个返回userListJson的逻辑视图的方法:
@requestMapping()
public String **(ModelMap map){
List<User> list = new ArrayList<User>();
map.addAttribute("userList",list);
return "userListJson"
}
这是我个人比较喜欢使用的几种方式,当然还有其他的很多方式,大家可以自己查查资料