您的位置:首页 > 编程语言 > Java开发

Spring开发框架集成之-自定义视图

2017-02-11 00:00 246 查看
摘要: 自定义一个基于Json的自定义视图

目前应用开发大多采用多端的模式,为了支持服务的多端共享往往我们需要服务端提供一种通用的视图返回格式,如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 自定义视图
相关文章推荐