All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jfinal.weixin.sdk.api.ApiResult Maven / Gradle / Ivy

/**
 * Copyright (c) 2011-2014, James Zhan 詹波 ([email protected]).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */

package com.jfinal.weixin.sdk.api;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;

import com.jfinal.kit.LogKit;
import com.jfinal.weixin.sdk.utils.JsonUtils;

/**
 * 封装 API 响应结果,将 json 字符串转换成 java 数据类型
 *
 * jackson 中 json 类型与 java 类型对应关系如下:
 *  
 *  http://wiki.fasterxml.com/JacksonInFiveMinutes
 *  JSON TYPE                JAVA TYPE
 *  object                    LinkedHashMap<String,Object>
 *  array                    ArrayList<Object>
 *  string                    String
 *  number (no fraction)    Integer, Long or BigInteger (smallest applicable)
 *  number (fraction)        Double (configurable to use BigDecimal)
 *  true|false                Boolean
 *  null                    null
 *  
*/ public class ApiResult implements Serializable { private static final long serialVersionUID = 722417391137943513L; private Map attrs; private String json; /** * 通过 json 构造 ApiResult,注意返回结果不为 json 的 api(如果有的话) * @param jsonStr json字符串 */ @SuppressWarnings("unchecked") public ApiResult(String jsonStr) { this.json = jsonStr; try { Map temp = JsonUtils.parse(jsonStr, Map.class); this.attrs = temp; } catch (Exception e) { throw new RuntimeException(e); } } /** * 通过 json 创建 ApiResult 对象,等价于 new ApiResult(jsonStr) * @param jsonStr json字符串 * @return {ApiResult} */ public static ApiResult create(String jsonStr) { return new ApiResult(jsonStr); } public String getJson() { return json; } 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("errcode"); } public String getErrorMsg() { Integer errorCode = getErrorCode(); if (errorCode != null) { String result = ReturnCode.get(errorCode); if (result != null) { return result; } LogKit.warn("未知返回码:" + errorCode); } return (String)attrs.get("errmsg"); } @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; } /** * 判断 API 请求结果失败是否由于 access_token 无效引起的 * 无效可能的情况 error_code 值: * 40001 = 获取access_token时AppSecret错误,或者access_token无效(刷新后也可以引起老access_token失效) * 42001 = access_token超时 * 42002 = refresh_token超时 * 40014 = 不合法的access_token * @return {boolean} */ public boolean isAccessTokenInvalid() { Integer ec = getErrorCode(); return ec != null && (ec == 40001 || ec == 42001 || ec == 42002 || ec == 40014); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy