Jfinal 通用JSON返回对象设计

在前台调用时,返回JSON情况一般是以下几种

1、返回success 或  fail,+ 提示信息,如::{returnCode:'success'}

2、返回1+ 提示信息中替换部分内容,显示个性提示,如:{returnCode:'fail',msg:'xxxx账户已登录'}

3、返回1+2+ 特殊对象,如: {returnCode:'fail',msg:'xxxx账户已登录',obj:{name:'张三',age:14}}

设计一个ReturnMsg公用类,实现以上返回对象的通用,在使用时直接将 new ReturnMsg 转换成Json输出即可。

本例中使用了Jfinal中定义的PropKit进行配置文件读取 ,以及renderJson将对象作为Json输出,脱离Jfinal环境可以使用其他方式实现以上两步:

 

1、配置文件定义,messageConfig.properties,内容如下:

(PS:将提示信息替换,即可适配多语言提示)

#自定义错误配置文件
err0000=操作失败
err0001=登录失败,用户名或密码错误
err0002=获取用户信息失败,请稍后再试
err0003=当前用户账号已登录,请先退出再登录
err0004=用户未登录或登录已过期,请重新登录
err0005=获取用户菜单失败
err0006=请输入登录账户ID
err0007=请输入登录密码
err0008=账号没有此操作权限
err0009=【[m1]】名称已存在,请重新输入
err0010=存在非法的请求数据,操作终止
err0011=传递参数错误,操作失败
err0012=用户编号【[m1]】已存在,请重新输入
err0013=登录账号【[m1]】已存在,请重新输入
err0014=登录账号【[m1]】已被停止使用,请与管理员联系
err0015=文件【[m1]】上传失败
err0016=请先删除该商品分类下面的所有商品
err0017=商品编号【[m1]】已存在,请重新输入

#自定义提示信息
msg0000=操作成功

ReturnMsg.java

/**
 * 前台反馈消息Bean,用于renderJson返回给前台时使用
 * @author 作者 左浩(James)E-mail: 25708164@qq.com
 * @date 创建时间:2016年10月7日 下午11:03:48
 * @version 1.0
 * @since
 */
package com.vstation.common.pojo;
import java.io.Serializable;
import com.jfinal.kit.PropKit;

public  class ReturnMsg implements Serializable {
	private static final long serialVersionUID = 1L;
	private String returnCode = "";								//返回值
	private String msgCode = "";								//消息代码
	private String msg = "";											//错误信息
	private Object obj = null;										//其他对象
	protected final static Object NULL = null;			//空Object对象
	protected final static String[] NULLARRAY = {};	//空String数组
	
	/**
	 * 简单返回对象
	 * @param returnCode
	 * @param msgCode
	 */
	public ReturnMsg(String returnCode,String msgCode){
		this(returnCode,msgCode,null,NULL,"");
		
	}
	
	/**
	 * 简单对象,带扩展信息
	 * @param returnCode
	 * @param msgCode
	 * @param exceptionString
	 */
	public ReturnMsg(String returnCode,String msgCode,String exceptionString){
		this(returnCode,msgCode,exceptionString,NULL,"");
	}
	
	/**
	 * 带扩展返回对象
	 * @param returnCode
	 * @param msgCode
	 * @param returnObject
	 */
	public ReturnMsg(String returnCode,String msgCode,Object returnObject){
		this(returnCode,msgCode,null,returnObject,"");
	}
	
	
	/**
	 * 带替换字符或返回对象
	 * @param returnCode
	 * @param msgCode
	 * @param exceptionString
	 * @param returnObj			
	 */
	public ReturnMsg(String returnCode,String msgCode,String exceptionString,String...replaceWord){
		this(returnCode,msgCode,exceptionString,NULL,replaceWord);
	}
	
	
/**
 * 带替换字符串和附加对象
 * @param returnCode   			返回码 success or  fail
 * @param msgCode      			消息code,与messageConfig.properties中匹配
 * @param exceptionString	 	java异常信息,可配置是否显示
 * @param returnObj 				需要附加返回的对象,没有则为null
 * @param replaceWord         	替换消息模板内容数组,分别替换 [m1],[m2],[m3]....		
 */
	public ReturnMsg(String returnCode,String msgCode,String exceptionString,Object returnObj,String...replaceWord){
		String extendMsg = "";																											//外部扩展信息
		String returnMsg = PropKit
				.use(PropKit.get("messageConfigFileName",
						"messageConfig.properties")).get(msgCode);
		
		//通过msgCode匹配信息配置文件的提示信息
		if (PropKit.getBoolean("isShowExtMsg", false) && exceptionString!=null) {					 //前台是否显示java exception error 信息,默认false
			extendMsg =",Java throws Error:" +exceptionString;
		}
		
		if(replaceWord.length>0){
			for (int i = 0; i < replaceWord.length; i++) {
				if(!"".equals(replaceWord[i]) &&  replaceWord[i]!=null){
					String m = "[m"+(i+1)+"]";
					returnMsg = returnMsg.replace(m, replaceWord[i]);
				}
			}
		}
		
		this.setMsgCode(msgCode);
		this.setReturnCode(returnCode);
		this.setMsg(returnMsg+extendMsg);
		this.setObj(returnObj==null?NULLARRAY:returnObj);
		
	}

	public String getReturnCode() {
		return returnCode;
	}

	public void setReturnCode(String returnCode) {
		this.returnCode = returnCode;
	}

	public String getMsgCode() {
		return msgCode;
	}

	public void setMsgCode(String msgCode) {
		this.msgCode = msgCode;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}


	public Object getObj() {
		return obj;
	}

	public void setObj(Object obj) {
		this.obj = obj;
	}
}

 

调用实例:


1、简单返回:
renderJson(new ReturnMsg("success","msg0000"));	//成功

renderJson(new ReturnMsg("fail","err0002"));		//失败

2、抛出错误信息:
try{
  .........
  } catch (Exception e) {
    log.error(e.toString());
	renderJson(new ReturnMsg("fail","err0000", StrExtendKit.stringToJson(e.toString(), true)));
 }

其中:  StrExtendKit.stringToJson 方法时自定义的将e.toString()中JSON敏感字符替换,代码如下:

public static String stringToJson(String s, boolean isJSjson) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			switch (c) {
			case '\'':
				if (isJSjson) {
					sb.append("\\\'");
				} else {
					sb.append("\'");
				}
				break;
			case '\"':
				if (!isJSjson) {
					sb.append("\\\"");
				} else {
					sb.append("\"");
				}
				break;
			case '\\':
				sb.append("\\\\");
				break; // 如果不处理单引号,可以释放此段代码,若结合StringDanYinToJSON()处理单引号就必须注释掉该段代码
			case '/':
				sb.append("\\/");
				break;
			case '\b':
				sb.append("\\b");
				break;// 退格
			case '\f':
				sb.append("\\f");
				break;// 走纸换页
			case '\n':
				sb.append("\\n");
				break;// 换行
			case '\r':
				sb.append("\\r");
				break;// 回车
			case '\t':
				sb.append("\\t");
				break;// 横向跳格
			default:
				sb.append(c);
			}
		}
		return sb.toString();
	}

 

 

 

 

转载于:https://my.oschina.net/vstation/blog/810155

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值