Json格式化工具類JsonUtil
阿新 • • 發佈:2018-11-30
Json格式的資料現在已經算是非常通用了,大部分公司的前後端互動的資料格式首選就是json格式的資料,這個工具類JsonUtil可以滿足工作中的大部分需求。
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.sunvalley.hadoop.VO.ApiMsgEnum; import com.sunvalley.hadoop.VO.BaseReturnVO; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; /** * 類或方法的功能描述 :TODO * * @author: logan.zou * @date: 2018-11-28 18:41 */ public class JsonUtil { private static ObjectMapper objectMapper = new ObjectMapper(); private static final String RES_CODE = "resCode"; private static final String RES_Data = "data"; private static final String RES_DES = "resDes"; public JsonUtil() { } public static <T> T fromObject(Object objs, Class<T> type) { try { String json = toJSON(objs); return fromJSON(json, type); } catch (Exception var3) { throw new RuntimeException(var3); } } public static <T> List<T> fromObjectArray(Object objs, Class<T> type) { try { String json = toJSON(objs); return fromJSONArray(json, type); } catch (Exception var3) { throw new RuntimeException(var3); } } public static <T> T fromFeign(String json, Class<T> type) { try { int resultCode = getInteger(json, "resCode"); if (resultCode != ApiMsgEnum.OK.getResCode()) { String resDes = getString(json, "resDes"); throw new Exception(resDes); } else { T obj = fromJSON(json, "data", type); return obj; } } catch (Exception var5) { throw new RuntimeException(var5); } } public static <T> List<T> fromFeignArray(String jsonStr, Class<T> elementClass) { try { int resultCode = getInteger(jsonStr, "resCode"); if (resultCode != ApiMsgEnum.OK.getResCode()) { String resDes = getString(jsonStr, "resDes"); throw new Exception(resDes); } else { return fromJSONArray(jsonStr, "data", elementClass); } } catch (Exception var4) { throw new RuntimeException(var4); } } public static <T> List<T> fromJSONArray(String jsonStr, String fieldName, Class<T> elementClass) { try { JsonNode node = objectMapper.readTree(jsonStr); JsonNode jsonNode = node.get(fieldName); if (jsonNode == null) { return null; } else { String fieldJson = node.get(fieldName).toString(); JavaType javaType = objectMapper.getTypeFactory().constructParametricType(ArrayList.class, new Class[]{elementClass}); return (List)objectMapper.readValue(fieldJson, javaType); } } catch (Exception var7) { throw new RuntimeException(var7); } } public static <T> List<T> fromJSONArray(String jsonStr, Class<T> elementClass) { try { JavaType javaType = objectMapper.getTypeFactory().constructParametricType(ArrayList.class, new Class[]{elementClass}); return (List)objectMapper.readValue(jsonStr, javaType); } catch (Exception var3) { throw new RuntimeException(var3); } } public static <T> T fromJSON(String jsonStr, String fieldName, Class<T> elementClass) { try { JsonNode node = objectMapper.readTree(jsonStr); String fieldJson = node.get(fieldName).toString(); return objectMapper.readValue(fieldJson, elementClass); } catch (Exception var5) { throw new RuntimeException(var5); } } public static String getJsonString(String jsonStr, String fieldName) { try { JsonNode node = objectMapper.readTree(jsonStr); JsonNode fieldJson = node.get(fieldName); return fieldJson == null ? "" : node.get(fieldName).toString(); } catch (Exception var4) { throw new RuntimeException(var4); } } public static String getString(String jsonStr, String fieldName) { try { JsonNode node = objectMapper.readTree(jsonStr); JsonNode fieldJson = node.get(fieldName); return fieldJson == null ? "" : node.get(fieldName).textValue(); } catch (Exception var4) { throw new RuntimeException(var4); } } public static Integer getInteger(String jsonStr, String fieldName) { try { JsonNode node = objectMapper.readTree(jsonStr); JsonNode jsonNode = node.get(fieldName); return jsonNode == null ? null : castToInt(jsonNode.asText()); } catch (Exception var4) { throw new RuntimeException(var4); } } public static Integer getInteger(String jsonStr, String fieldName, int defVal) { try { JsonNode node = objectMapper.readTree(jsonStr); JsonNode jsonNode = node.get(fieldName); return jsonNode == null ? defVal : castToInt(jsonNode.asText()); } catch (Exception var5) { return defVal; } } public static Long getLong(String jsonStr, String fieldName) { try { JsonNode node = objectMapper.readTree(jsonStr); JsonNode jsonNode = node.get(fieldName); return jsonNode == null ? null : castToLong(jsonNode.asText()); } catch (Exception var4) { throw new RuntimeException(var4); } } public static <T> T fromJSON(String json, Class<T> type) { try { T obj = objectMapper.readValue(json, type); return obj; } catch (Exception var4) { throw new RuntimeException(var4); } } public static <T> T fromJSON(BaseReturnVO baseReturnVO, Class<T> type) { try { String json = toJson(baseReturnVO.getData()); T obj = objectMapper.readValue(json, type); return obj; } catch (Exception var4) { throw new RuntimeException(var4); } } public static <T> T fromJSON(String source, TypeReference<T> ref) throws Exception { Object rtn = null; try { rtn = objectMapper.readValue(source, ref); return (T) rtn; } catch (IOException var4) { throw var4; } } public static <T> List<T> fromJSON(String jsonStr, Class<?> collectionClass, Class<T> elementClass) throws Exception { try { JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass, new Class[]{elementClass}); return (List)objectMapper.readValue(jsonStr, javaType); } catch (Exception var4) { throw var4; } } public static <T> String toJSON(T obj) { try { String jsonStr = objectMapper.writeValueAsString(obj); return jsonStr; } catch (Exception var3) { throw new RuntimeException(var3); } } public static String toJson(Object object) throws Exception { return objectMapper.writeValueAsString(object); } private static Integer castToInt(Object value) { if (value == null) { return null; } else if (value instanceof Integer) { return (Integer)value; } else if (value instanceof Number) { return ((Number)value).intValue(); } else if (value instanceof String) { String strVal = (String)value; if (strVal.length() != 0 && !"null".equals(strVal) && !"NULL".equals(strVal)) { if (strVal.indexOf(44) != 0) { strVal = strVal.replaceAll(",", ""); } return Integer.parseInt(strVal); } else { return null; } } else { return value instanceof Boolean ? (Boolean)value ? 1 : 0 : null; } } private static Long castToLong(Object value) { if (value == null) { return null; } else if (value instanceof Number) { return ((Number)value).longValue(); } else if (value instanceof String) { String strVal = (String)value; if (strVal.length() != 0 && !"null".equals(strVal) && !"NULL".equals(strVal)) { if (strVal.indexOf(44) != 0) { strVal = strVal.replaceAll(",", ""); } try { return Long.parseLong(strVal); } catch (NumberFormatException var3) { return null; } } else { return null; } } else { return null; } } static { objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); } }
程式碼中使用到的 BaseReturnVO
public class BaseReturnVO implements Serializable { protected int resCode; protected String resDes; protected Object data; public int getResCode() { return this.resCode; } public void setResCode(int resCode) { this.resCode = resCode; } public String getResDes() { return this.resDes; } public void setResDes(String resDes) { this.resDes = resDes; } public Object getData() { return this.data; } public void setData(Object data) { this.data = data; } public BaseReturnVO() { } public BaseReturnVO(int code, String msg) { this.resCode = code; this.resDes = msg; this.data = ""; } public BaseReturnVO(int code, Exception e) { this.resCode = code; this.resDes = e.getMessage(); this.data = ""; } public BaseReturnVO(int code, String msg, Exception e) { this.resCode = code; this.resDes = msg; this.data = ""; } public BaseReturnVO(Object data) { this.resCode = ApiMsgEnum.OK.getResCode(); this.resDes = ApiMsgEnum.OK.getResDes(); this.data = data; } public BaseReturnVO(Exception exp) { this.resCode = 500; this.resDes = exp.getMessage(); this.data = ""; } public BaseReturnVO(ApiMsgEnum msgEnum) { this.resCode = msgEnum.getResCode(); this.resDes = msgEnum.getResDes(); this.data = ""; } }
程式碼中使用到的列舉類 ApiMsgEnum
public enum ApiMsgEnum { OK(200, "OK"), BAD_REQUEST(400, "Bad Request"), NOT_FOUND(404, "Not Found"), UNAUTHORIZED(401, "Unauthorized"), FORBIDDEN(403, "Forbidden"), INTERNAL_SERVER_ERROR(500, "Internal Server Error"), BAD_GATEWAY(502, "Bad Gateway"), SERVICE_UNAVAILABLE(503, "Service Unavailable"), GATEWAY_TIMEOUT(504, "Gateway Timeout"), COMMON_SERVER_ERROR(10000, "COMMON_SERVER_ERROR"), USER_SERVER_ERROR(11000, "USER_SERVER_ERROR"), USER_REDIS_ERROR(11001, "USER_REDIS_ERROR"), PRODUCT_SERVER_ERROR(12000, "PRODUCT_SERVER_ERROR"), PRODUCT_PARAMETER_ERROR(12001, "PRODUCT_PARAMETER_ERROR"), PRODUCT_BOM_ERROR(12002, "PRODUCT_SERVER_ERROR"), ORDER_SERVER_ERROR(13000, "ORDER_SERVER_ERROR"), CUSTOMER_SERVER_ERROR(13000, "CUSTOMER_SERVER_ERROR"); private int resCode; private String resDes; public static Map<Integer, String> apiMsgMap = new HashMap(); private ApiMsgEnum(int code, String msg) { this.resCode = code; this.resDes = msg; } private static Map<Integer, String> getAll() { Map<Integer, String> retMap = new LinkedHashMap(); ApiMsgEnum[] enumArr = values(); ApiMsgEnum[] var2 = enumArr; int var3 = enumArr.length; for(int var4 = 0; var4 < var3; ++var4) { ApiMsgEnum aEnum = var2[var4]; retMap.put(aEnum.getResCode(), aEnum.getResDes()); } return retMap; } public int getResCode() { return this.resCode; } public void setResCode(int resCode) { this.resCode = resCode; } public String getResDes() { return this.resDes; } public void setResDes(String resDes) { this.resDes = resDes; } static { apiMsgMap = getAll(); } }