基于JsonObject的消息载体JsonObjectResult

来源:互联网 发布:免费手机qq群发软件 编辑:程序博客网 时间:2024/05/16 04:50

在网站开发过程中经常需要通过json传递数据,为方便传输,编写一个工具类JsonObjectResult对一些属性进行封装,便于赋值与传输,代码如下:
JsonObjectResult.java

import com.google.gson.Gson;import com.google.gson.JsonObject;/** * 基于com.google.gson.JsonObject的消息载体 *  * @author 51 */public class JsonObjectResult {    public static final String KEY_RESULT = "result";    public static final String KEY_ACTION = "action";    public static final String KEY_TARGET = "target";    public static final String KEY_MESSAGE = "message";    public static final String VALUE_RESULT_SUCCESS = "success";    public static final String VALUE_RESULT_FAILED = "failed";    public static final String VALUE_RESULT_UNSET = "unset";    private JsonObject jsonObject;    public JsonObjectResult() {        this.jsonObject = new JsonObject();        this.jsonObject.addProperty(KEY_RESULT, VALUE_RESULT_UNSET);    }    /**     * 设置结果:成功     */    public void setSuccess() {        if (jsonObject.has(KEY_RESULT)) {            jsonObject.remove(KEY_RESULT);        }        jsonObject.addProperty(KEY_RESULT, VALUE_RESULT_SUCCESS);    }    /**     * 设置结果:失败     */    public void setFailed() {        if (jsonObject.has(KEY_RESULT)) {            jsonObject.remove(KEY_RESULT);        }        jsonObject.addProperty(KEY_RESULT, VALUE_RESULT_FAILED);    }    /**     * 结果是否成功     *      * @return true 成功     */    public boolean isSucceed() {        if (jsonObject.has(KEY_RESULT)) {            return VALUE_RESULT_SUCCESS.equals(jsonObject.get(KEY_RESULT).toString());        }        return false;    }    /**     * 结果是否失败     *      * @return true 失败     */    public boolean isFailed() {        if (jsonObject.has(KEY_RESULT)) {            return VALUE_RESULT_FAILED.equals(jsonObject.get(KEY_RESULT).toString());        }        return false;    }    /**     * 设置行为     */    public void setAction(String action) {        jsonObject.addProperty(KEY_ACTION, action);    }    /**     * 取得行为     */    public String getAction() {        if (jsonObject.has(KEY_ACTION)) {            return jsonObject.get(KEY_ACTION).toString();        }        return null;    }    /**     * 设置消息     */    public void setMessage(String message) {        jsonObject.addProperty(KEY_MESSAGE, message);    }    /**     * 取得消息     */    public String getMessage() {        if (jsonObject.has(KEY_MESSAGE)) {            return jsonObject.get(KEY_MESSAGE).toString();        }        return null;    }    public void put(String key, Object value) {        jsonObject.add(key, new Gson().toJsonTree(value));    }    public <T> T get(String key, Class<T> clazz) {        return new Gson().fromJson(jsonObject.get(key), clazz);    }    @Override    public String toString() {        return getJsonObject().toString();    }    public JsonObject getJsonObject() {        return jsonObject;    }}

使用时,只需要创建一个实例并进行设置即可,例如常见的登录操作,返回了一个json字符串:
UserController.java

@RequestMapping(value = "/login", produces = "text/plain; charset=UTF-8")@ResponseBodypublic String login(@RequestParam String username, @RequestParam String password, @RequestParam Integer userType, HttpSession session) {    session.removeAttribute(Constants.SESSION_LOGIN_KEY);    JsonObjectResult jor = new JsonObjectResult();    jor.setAction("login");    User user = userService.checkUserLogin(username, password, userType);    if (null == user) {        jor.setFailed();        jor.setMessage("用户名或密码错误");        return jor.toString();    } else if (user.getStatus().equals(User.USER_STATUS_FROZEN)) {        jor.setFailed();        jor.setMessage("用户账号已被冻结,请联系管理员");        return jor.toString();    } else {        session.setAttribute(Constants.SESSION_LOGIN_KEY, user);        jor.setSuccess();        return jor.toString();    }}

对应的在客户端进行处理:
login.js

function login() {    if(validate()) {        $("#loginForm").ajaxSubmit({            dataType : "json",            success : function(data) {                if (data.result == "failed") {                    alert(data.message);                } else if (data.result == "success") {                    alert("登录成功!");                    window.location.href = contextPath + '/loginSuccess';                }            }        }).submit(function() {            return false; // 页面不自动跳转        });    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 时间短怎么办吃什么呢 婆婆家人给气受怎么办 我想离婚他不离怎么办 我又胖又丑怎么办 吃避孕药变胖了怎么办 熬夜久了眼睛疼怎么办 熬夜眼睛疼肿了怎么办 胡须长的太快怎么办 乳房有小结结该怎么办 我一点胸都没有怎么办 狗狗不愿意睡窝怎么办 狗狗喜欢睡地板怎么办 小金毛不吃狗粮怎么办 孕前没有吃叶酸怎么办 严重少精和畸形怎么办 大学混了四年怎么办 和家人相处很累怎么办 40多岁眼睛花怎么办 侧方停车右边宽怎么办 有公主病的老婆怎么办? 圆通快递太慢了怎么办 美台军舰互停怎么办 安装包删除不掉怎么办 艾灸后皮肤极痒怎么办 拔罐如果有水泡怎么办 拔罐拔出水泡来怎么办 拔罐拔出了水泡怎么办 风湿引起的背疼怎么办 拔罐减肥不瘦怎么办 艾灸后脸上长痘怎么办 艾灸烟大怎么办 湿毛巾 月经推迟一个月了还不来怎么办 埋线了喝酒了怎么办 对待孩子脾气暴燥怎么办 买的新鞋子臭脚怎么办 鞋子臭脚怎么办如何除 惠普803墨盒干了怎么办 酷派手机无命令怎么办 华为手机锁机了怎么办 小孩被蜘蛛咬了怎么办 我是一个不爱说话的人怎么办