package com.javaweb.third.baidu.bean; import com.alibaba.fastjson.JSONObject; import org.slf4j.LoggerFactory; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; import java.util.List; import java.util.Map; /** * 封装 API 响应结果,将 json 字符串转换成 java 数据类型 */ public class BaiduApiResult implements Serializable { org.slf4j.Logger logger= LoggerFactory.getLogger(BaiduApiResult.class); private static final long serialVersionUID = 722417391137943513L; private Map attrs; private String json; /** * 通过 json 构造 bean.BaiduApiResult,注意返回结果不为 json 的 api(如果有的话) * @param jsonStr json字符串 */ @SuppressWarnings("unchecked") public BaiduApiResult(String jsonStr) { this.json = jsonStr; try { Map temp = JSONObject.parseObject(jsonStr,Map.class); this.attrs = temp; } catch (Exception e) { throw new RuntimeException(e); } } /** * 通过 json 创建 bean.BaiduApiResult 对象,等价于 new bean.BaiduApiResult(jsonStr) * @param jsonStr json字符串 * @return {bean.BaiduApiResult} */ public static BaiduApiResult create(String jsonStr) { return new BaiduApiResult(jsonStr); } public String getJson() { return json; } @Override public String toString() { return getJson(); } /** * APi 请求是否成功返回 * @return {boolean} */ public boolean isSucceed() { Integer errorCode = getErrorCode(); // errorCode 为 0 时也可以表示为成功,详见:http://mp.weixin.qq.com/wiki/index.php?title=%E5%85%A8%E5%B1%80%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E return (errorCode == null || errorCode == 0); } public Integer getErrorCode() { return getInt("error_code"); } public String getErrorMsg() { Integer errorCode = getErrorCode(); if (errorCode != null) { String result = BaiduErrCode.errMsg(errorCode); if (result != null) { return result; }else{ logger.warn("未知返回码:" + errorCode); return getStr("error_msg"); } } return (String)attrs.get("error_msg"); } @SuppressWarnings("unchecked") public T get(String name) { return (T)attrs.get(name); } public String getStr(String name) { return (String)attrs.get(name); } public Integer getInt(String name) { Number number = (Number) attrs.get(name); return number == null ? null : number.intValue(); } public Long getLong(String name) { Number number = (Number) attrs.get(name); return number == null ? null : number.longValue(); } public BigInteger getBigInteger(String name) { return (BigInteger)attrs.get(name); } public Double getDouble(String name) { return (Double)attrs.get(name); } public BigDecimal getBigDecimal(String name) { return (BigDecimal)attrs.get(name); } public Boolean getBoolean(String name) { return (Boolean)attrs.get(name); } @SuppressWarnings("rawtypes") public List getList(String name) { return (List)attrs.get(name); } @SuppressWarnings("rawtypes") public Map getMap(String name) { return (Map)attrs.get(name); } public Map getAttrs(){ return this.attrs; } }