Spring开发框架集成之-自定义视图
2017-02-11 00:00
246 查看
摘要: 自定义一个基于Json的自定义视图
目前应用开发大多采用多端的模式,为了支持服务的多端共享往往我们需要服务端提供一种通用的视图返回格式,如XML或者Json。本例是个人目前开发中的集成开发框架的一部分,该开发框架基于spring进行二次定制开发,以下是视图层的代码demo。视图返回结果如下。
关于spring自定义视图推荐下面博文 开发 Spring 自定义视图和视图解析器
###1.自定义视图解析器
###2. 自定义视图父类
###3.Json视图父类
###4.定义视图返回格式
###5.视图使用
目前应用开发大多采用多端的模式,为了支持服务的多端共享往往我们需要服务端提供一种通用的视图返回格式,如XML或者Json。本例是个人目前开发中的集成开发框架的一部分,该开发框架基于spring进行二次定制开发,以下是视图层的代码demo。视图返回结果如下。
关于spring自定义视图推荐下面博文 开发 Spring 自定义视图和视图解析器
###1.自定义视图解析器
package com.magisys.sifs.framework.core.view; import java.util.Locale; import org.springframework.core.Ordered; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.AbstractCachingViewResolver; public class ResultViewResolver extends AbstractCachingViewResolver implements Ordered{ private int order = Integer.MAX_VALUE; private View resultModel; @Override protected View loadView(String viewName, Locale locale) throws Exception { throw new UnsupportedOperationException("The un-realization of the function"); } public View getResultModel() { return resultModel; } public void setResultModel(View resultModel) { this.resultModel = resultModel; } public int getOrder() { return this.order; } public void setOrder(int order) { this.order = order; } }
###2. 自定义视图父类
package com.magisys.sifs.framework.core.view; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.AbstractView; /** * * @ClassName: ResultView * @Description: 框架基础视图 * */ public abstract class ResultView extends AbstractView{ protected enum CONTENT_TYPE { //Json JSON("text/json;charset=utf-8"); private String value; CONTENT_TYPE(String value){ this.value = value; } @Override public String toString() { return this.value; } } @Override protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType(getResultContentType().toString()); render(response); } /** * * @Title: render * @Description: 渲染视图 * @param @param response * @param @throws Exception * @return void * @throws */ protected abstract void render(HttpServletResponse response) throws Exception; /** * * @Title: getResultContentType * @Description: 获取上下文 * @param @return * @return CONTENT_TYPE * @throws */ protected abstract CONTENT_TYPE getResultContentType(); /** * * @Title: getText * @Description: 获取写入文本 * @param @return * @return String * @throws */ protected abstract String getText(); }
###3.Json视图父类
package com.magisys.sifs.framework.core.view; import javax.servlet.http.HttpServletResponse; import com.magisys.sifs.framework.core.common.utils.JsonUtil; /** * * @ClassName: JsonBasedResultView * @Description: 基于JSON的结果视图 */ public abstract class JsonResultView extends ResultView { @Override protected void render(HttpServletResponse response) throws Exception { String text = getText(); if (text != null) { response.getWriter().write(text); } } @Override protected CONTENT_TYPE getResultContentType() { return CONTENT_TYPE.JSON; } @Override protected String getText() { Object obj = getObject(); if (obj != null) { if (obj instanceof String) { return obj + ""; } else { return JsonUtil.object2Json(obj); } } return null; } /** * 获取待写入的对象 * * @return */ protected abstract Object getObject(); }
###4.定义视图返回格式
package com.magisys.sifs.framework.core.view.impl; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; import com.magisys.sifs.framework.core.common.utils.DateUtil; import com.magisys.sifs.framework.core.common.utils.DateUtil.DATE_PATTERN; import com.magisys.sifs.framework.core.view.JsonResultView; /** * * @ClassName: ProtocolResultView * @Description: 协议资源结果对象-该视图对象用于返回标准协议的JSON结果 */ public class ProtocolResultView extends JsonResultView { //请求状态 private Boolean resultStatus; //返回码 private String returnCode; //响应时间 private String responseTime; //结果信息 private String resultMessage; //返回结果 private Object result; //默认返回码 private String CODE = "00000"; public ProtocolResultView() { } public ProtocolResultView(Object data) { this.resultStatus = true; this.returnCode = CODE; this.responseTime = DateUtil.formatDate(new Date(), DATE_PATTERN.yyyy_MM_dd_HH_mm_ss); this.result = data; } public ProtocolResultView(Object data, String message) { this.result = data; this.resultStatus = true; this.returnCode = CODE; this.responseTime = DateUtil.formatDate(new Date(), DATE_PATTERN.yyyy_MM_dd_HH_mm_ss); this.resultMessage = message; } public ProtocolResultView(Boolean success, String resultCode, String message) { this.resultStatus = success; this.returnCode = resultCode; this.responseTime = DateUtil.formatDate(new Date(), DATE_PATTERN.yyyy_MM_dd_HH_mm_ss); this.resultMessage = message; } public ProtocolResultView(Object data, Boolean success, String resultCode, String message) { this.result = data; this.resultStatus = success; this.returnCode = resultCode; this.responseTime = DateUtil.formatDate(new Date(), DATE_PATTERN.yyyy_MM_dd_HH_mm_ss); this.resultMessage = message; } public Boolean getSuccess() { return resultStatus; } public void setSuccess(Boolean success) { this.resultStatus = success; } public String getResultCode() { return returnCode; } public void setResultCode(String resultCode) { this.returnCode = resultCode; } public String getTime() { return responseTime; } public void setTime(String time) { this.responseTime = time; } public String getMessage() { return resultMessage; } public void setMessage(String message) { this.resultMessage = message; } public Object getData() { return result; } public void setData(Object data) { this.result = data; } @Override protected Object getObject() { Map<String, Object> map = new LinkedHashMap<String, Object>(); map.put("resultStatus", resultStatus); map.put("returnCode", returnCode); map.put("responseTime", responseTime); map.put("resultMessage", resultMessage); if(resultStatus){ map.put("result", result); }else{ map.put("result", null); } return map; } }
###5.视图使用
@Controller @RequestMapping("/") public class IndexController { @RequestMapping("handler") public ResultView index(String user,String password){ System.out.println("com.magisys.sifs.sfe.controller.IndexController.index"); if(null == user || null == password ||"".equals(user)|| "".equals(password)){ //throw new StandardBusinessException(new BusinessExceptionDescription("002", SHOW_TYPE.ERROR, "傻逼呀你")); throw new StandardProtocolException(new StandardProtocolExceptionDescription("004", "你是不是傻?")); } return new ProtocolResultView(new User(user, user+"nik", password)); } }
相关文章推荐
- 开发 Spring 自定义视图和视图解析器
- Android快速开发框架Android_BaseLib,集成了常用工具类,自定义View控件,Base基类封装,常用开源框架
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- 开发 Spring 自定义视图和视图解析器
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目以及SSM框架下载
- Stripes视图框架内置Spring集成的使用
- 框架学习之Spring 第四节 Spring集成JDBC组件开发
- [转载]开发 Spring 自定义视图和视图解析器
- 开发 Spring 自定义视图和视图解析器
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- Stripes视图框架内置Spring集成的使用
- 开发 Spring 自定义视图和视图解析器
- 开发 Spring 自定义视图和视图解析器
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- 框架学习之Spring 第四节 Spring集成JDBC组件开发
- 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目
- Java开发框架spring实现自定义缓存标签