基于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; // 页面不自动跳转 }); }}
阅读全文
0 0
- 基于JsonObject的消息载体JsonObjectResult
- Apache Camel Route节点的消息载体Exchange
- Apache Camel Route节点的消息载体Exchange
- Apache Camel Route节点的消息载体Exchange
- Android消息机制源码解析(一)——消息的载体Message
- 我们是科技的载体
- 陌生是我们的载体
- 函数模板的载体-HPP
- android中handler和bundle有什么区别和联系 都是用来传递消息吗都是信息的载体吗
- [XML学习笔记][2.4]XML作为消息传递载体
- 让手机成为电子凭证的载体
- 过程是经验积累的最好载体
- CMOS 是BIOS的硬件载体
- 038--权证,你是谁的载体
- UIView —— 所有控件的载体
- 【综合】几种数据载体的比较
- 书籍-传承至今的智慧载体
- 互联网的载体--操作系统
- 今日头条 CEO 张一鸣:面试了 2000 个年轻人,混得好的都有这 5 种特质
- caffe---create自己的数据出现的各种bug
- JavaScript面向对象和高级05
- web-侧边栏
- Entity Framework Code First使用DbContext查询
- 基于JsonObject的消息载体JsonObjectResult
- 利用反射取得泛型的类名和属性名
- 07 OrangePi 配置telnet服务
- 树莓派+motion安装摄像头实现远程监控
- JavaScript面向对象和高级06
- <胜过幽暗>读后感
- 基础知识
- 高通sensor core培训笔记
- 【Redis学习】:Linux环境下的Redis安装与配置