spring3.0后的 mvc框架中,可以实现了视图模板,通过配置,我们可以轻松的生成jsp,xml,json,Excel 等格式,本文主要记录xml,json和Excel
首先增加 配置 如下,可以根据bean 的name属性查找配置,否则默认为jsp的视图
<!-- 视图解析器,根据视图的名称new ModelAndView(name),在配置文件查找对应的bean配置 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"/>
</bean>
json 视图,通过json-lib-2.4-jdk15.jar ,实现json数据视图
需要jar包 json-lib-2.4-jdk15.jar,commons-lang-2.6.jar,commons-beanutils.jar
下载页 http://download.csdn.net/download/meililiuwei/7058145
spring.xml 需增加配置
<!-- 转化 java对象成json,处理hibernate延迟加载 -->
<bean id="cfg" class="net.sf.json.JsonConfig">
<property name="excludes">
<value>handler,hibernateLazyInitializer</value>
</property>
</bean>
<!-- 使用 json-lib 转换java对象 成 json -->
<bean name="jsonLibView" class="com.common.view.SpringJsonLibView">
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="encodeing" value="gbk"/>
<property name="cfg" ref="cfg"></property>
</bean>
视图文件SpringJsonLibView ,需要继承 spring 视图抽象类 AbstractView,实现抽象方法
public void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest req, HttpServletResponse res) throws Exception {}
SpringJsonLibView 文件内容
package com.common.view;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.servlet.view.AbstractView;
public class SpringJsonLibView extends AbstractView {
private static final String default_content_type = "application/json";
private static final String default_char_encoding = "UTF-8";
private String encoding = default_char_encoding;
private Set<String> renderedAttributes;
private JsonConfig cfg = null;
public void setEncodeing(String encoding) {
this.encoding = encoding;
}
public void setCfg(JsonConfig cfg) {
this.cfg = cfg;
}
public SpringJsonLibView() {
setContentType(default_content_type);
}
public void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest req, HttpServletResponse res) throws Exception {
model = filterModel(model);
JSON json = null;
if(model.size() ==1){
Set keyset = model.keySet();
json = JSONSerializer.toJSON(model.get(keyset.toArray()[0]), cfg);
}else{
json = JSONSerializer.toJSON(model, cfg);
}
res.setContentType(getContentType());
req.setCharacterEncoding(encoding);
PrintWriter printwriter = res.getWriter();
printwriter.println(json);
System.out.println("视图转换json=="+json);
printwriter.flush();
printwriter.close();
}
protected Map<String, Object> filterModel(Map<String, Object> model) {
Map<String, Object> result = new HashMap<String, Object>(model.size());
Set<String> renderedAttributes = !CollectionUtils
.isEmpty(this.renderedAttributes) ? this.renderedAttributes
: model.keySet();
for (Map.Entry<String, Object> entry : model.entrySet()) {
if (!(entry.getValue() instanceof BindingResult)
&& renderedAttributes.contains(entry.getKey())) {
result.put(entry.getKey(), entry.getValue());
}
}
return result;
}
}
spring 控制器 control 代码
@RequestMapping(value = "/test/json")
@ResponseBody
public ModelAndView showJson() {
System.out.println("转化json开始");
ModelAndView model = new ModelAndView("jsonLibView");
Tac20 ac20 = new Tac20();
ac20.setAab001(1234L);
ac20.setAac013("kankan");
Tac01 ac01 = new Tac01();
ac01.setAac003("名字");
ac20.setAc01(ac01);
model.addObject(ac20);
TJM01 jm = new TJM01();
jm.setAac001(1l);
jm.setAac003("张1");
jm.setAac004("男1");
model.addObject(jm);
JSONObject json = JSONObject.fromObject(ac20);
System.out.println("json手动转化===" + json);
return model;
}
@RequestMapping(value = "/test/list/json")
public ModelAndView showListJson() {
System.out.println("转化json开始");
ModelAndView model = new ModelAndView("jsonLibView");
TJM01 jm = new TJM01();
jm.setAac001(1l);
jm.setAac003("张1");
jm.setAac004("男1");
TJM01 jm2 = new TJM01();
jm2.setAac001(2l);
jm2.setAac003("张2");
jm2.setAac004("男2");
List list = new ArrayList();
list.add(jm);
list.add(jm2);
model.addObject(list);
JSONArray json = JSONArray.fromObject(list);
System.out.println("json手动转化===" + json);
return model;
}
jsp 页面
<a href="<%=path%>/test/json.do">json转化</a>
<a href="<%=path%>/test/list/json.do">json-list转化</a>
json转化 结果
{"TJM01":{"aac001":1,"aac003":"张1","aac004":"男1","aac006":0,"aac007":0},"tac20":{"aab001":1234,"aac001":0,"aac013":"kankan","aac031":"","aac066":"","aae030":0,"aae031":0,"aaz157":0,"ac01":{"aac001":0,"aac003":"名字","aac004":"","aac006":0,"aac007":0,"tac20s":[]},"ae10":null}}
json-list转化
[{"aac001":1,"aac003":"张1","aac004":"男1","aac006":0,"aac007":0},{"aac001":2,"aac003":"张2","aac004":"男2","aac006":0,"aac007":0}]
jar下载页 http://download.csdn.net/download/meililiuwei/7058145 免积分