基于JsonObject的消息载体JsonObjectResult

在网站开发过程中经常需要通过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")
@ResponseBody
public 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; // 页面不自动跳转
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值