在网站开发过程中经常需要通过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; // 页面不自动跳转
});
}
}