廢話不多說,直接上代碼,源代碼是慕課網老師風間影月寫的,我拿來直接用了。
package com.yb.entity; import java.util.List; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; /** * * @Title: LeeJSONResult.java * @Package com.lee.utils * @Description: 自定義響應數據結構 * 這個類是提供給門戶,ios,安卓,微信商城用的 * 門戶接受此類數據后需要使用本類的方法轉換成對於的數據類型格式(類,或者list) * 其他自行處理 * 200:表示成功 * 500:表示錯誤,錯誤信息在msg字段中 * 501:bean驗證錯誤,不管多少個錯誤都以map形式返回 * 502:攔截器攔截到用戶token出錯 * 555:異常拋出信息 * Copyright: Copyright (c) 2016 * Company:Nathan.Lee.Salvatore * * @author leechenxiang * @date 2016年4月22日 下午8:33:36 * @version V1.0 */ public class JsonResult { // 定義jackson對象 private static final ObjectMapper MAPPER = new ObjectMapper(); // 響應業務狀態 private Integer status; // 響應消息 private String msg; // 響應中的數據 private Object data; private String ok; // 不使用 public static JsonResult build(Integer status, String msg, Object data) { return new JsonResult(status, msg, data); } public static JsonResult ok(Object data) { return new JsonResult(data); } public static JsonResult ok() { return new JsonResult(null); } public static JsonResult errorMsg(String msg) { return new JsonResult(500, msg, null); } public static JsonResult errorMap(Object data) { return new JsonResult(501, "error", data); } public static JsonResult errorTokenMsg(String msg) { return new JsonResult(502, msg, null); } public static JsonResult errorException(String msg) { return new JsonResult(555, msg, null); } public JsonResult() { } // public static LeeJSONResult build(Integer status, String msg) { // return new LeeJSONResult(status, msg, null); // } public JsonResult(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public JsonResult(Object data) { this.status = 200; this.msg = "OK"; this.data = data; } public Boolean isOK() { return this.status == 200; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } /** * * @Description: 將json結果集轉化為LeeJSONResult對象 * 需要轉換的對象是一個類 * @param jsonData * @param clazz * @return * * @author leechenxiang * @date 2016年4月22日 下午8:34:58 */ public static JsonResult formatToPojo(String jsonData, Class<?> clazz) { try { if (clazz == null) { return MAPPER.readValue(jsonData, JsonResult.class); } JsonNode jsonNode = MAPPER.readTree(jsonData); JsonNode data = jsonNode.get("data"); Object obj = null; if (clazz != null) { if (data.isObject()) { obj = MAPPER.readValue(data.traverse(), clazz); } else if (data.isTextual()) { obj = MAPPER.readValue(data.asText(), clazz); } } return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj); } catch (Exception e) { return null; } } /** * * @Description: 沒有object對象的轉化 * @param json * @return * * @author leechenxiang * @date 2016年4月22日 下午8:35:21 */ public static JsonResult format(String json) { try { return MAPPER.readValue(json, JsonResult.class); } catch (Exception e) { e.printStackTrace(); } return null; } /** * * @Description: Object是集合轉化 * 需要轉換的對象是一個list * @param jsonData * @param clazz * @return * * @author leechenxiang * @date 2016年4月22日 下午8:35:31 */ public static JsonResult formatToList(String jsonData, Class<?> clazz) { try { JsonNode jsonNode = MAPPER.readTree(jsonData); JsonNode data = jsonNode.get("data"); Object obj = null; if (data.isArray() && data.size() > 0) { obj = MAPPER.readValue(data.traverse(), MAPPER.getTypeFactory().constructCollectionType(List.class, clazz)); } return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj); } catch (Exception e) { return null; } } public String getOk() { return ok; } public void setOk(String ok) { this.ok = ok; } }
用的時候直接調用JsonResult的OK方法即可,如圖:
結果為下圖:password不顯示是因為我在password實體類中添加了@JsonIgnore注解
如果沒用JsonResult封裝類實現的話,類似於裸奔加載,如下圖: