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

net.guerlab.sdk.wx.request.AbstractRequest Maven / Gradle / Ivy

The newest version!
package net.guerlab.sdk.wx.request;

import java.net.URLEncoder;
import java.util.Map;
import java.util.TreeMap;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.databind.ObjectMapper;

import net.guerlab.sdk.wx.WeiXinConstants;
import net.guerlab.sdk.wx.WeiXinException;
import net.guerlab.sdk.wx.entity.ErrorData;
import net.guerlab.sdk.wx.response.AbstractResponse;

/**
 * 抽象请求
 *
 * @author guer
 *
 * @param 
 *            响应类型
 * @param 
 *            响应数据类型
 */
public abstract class AbstractRequest, E> {

    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRequest.class);

    protected final Map requestParams = new TreeMap<>();

    private ObjectMapper objectMapper;

    protected T response;

    /**
     * 获取是否需要进行http请求
     *
     * @return 是否需要进行http请求
     */
    public boolean needHttpRequest() {
        return true;
    }

    /**
     * 获取请求方式
     *
     * @return 请求方式
     */
    public String getMethod() {
        return WeiXinConstants.METHOD_POST;
    }

    /**
     * 获取数据格式
     *
     * @return 数据格式
     */
    public String getFormat() {
        return WeiXinConstants.FORMAT_JSON;
    }

    /**
     * 获取请求正文
     *
     * @return 请求正文
     */
    public String getRequestContent() {
        return null;
    }

    /**
     * 执行请求
     *
     * @param responseData
     *            响应数据
     */
    protected abstract void execut0(
            String responseData);

    /**
     * 执行请求
     *
     * @param responseData
     *            响应数据
     * @return 响应实体
     */
    public AbstractRequest execute(
            String responseData) {
        execut0(responseData);
        return this;
    }

    /**
     * 解析响应js数据
     *
     * @param responseData
     *            响应数据
     * @param clazz
     *            json实体类型
     * @param 
     *            json实体类型
     * @return json数据
     */
    public final  D parseResponseJsData(
            String responseData,
            Class clazz) {
        ObjectMapper mapper = objectMapper;
        if (mapper == null) {
            mapper = new ObjectMapper();
        }

        try {
            ErrorData errorData = mapper.readValue(responseData, ErrorData.class);

            if (StringUtils.isNotBlank(errorData.getErrcode())) {
                throw new WeiXinException("code : " + errorData.getErrcode() + ", msg : " + errorData.getErrmsg());
            }

            D data = mapper.readValue(responseData, clazz);

            return data;
        } catch (Exception e) {
            LOGGER.debug(e.getMessage(), e);
            throw new WeiXinException(e.getMessage(), e);
        }
    }

    /**
     * 获取请求值
     *
     * @param object
     *            数据对象
     * @return 字符串值
     */
    protected final static String getRequestValue(
            Object object) {
        if (object == null) {
            return "";
        }

        try {
            return URLEncoder.encode(object.toString(), WeiXinConstants.CHARSET_UTF8);
        } catch (Exception e) {
            LOGGER.debug(e.getMessage(), e);
            return "";
        }
    }

    /**
     * 获取响应实体
     *
     * @return 响应实体
     */
    public final T getResponse() {
        return response;
    }

    /**
     * 返回 objectMapper
     *
     * @return objectMapper
     */
    public ObjectMapper getObjectMapper() {
        return objectMapper;
    }

    /**
     * 设置objectMapper
     *
     * @param objectMapper
     *            objectMapper
     */
    public void setObjectMapper(
            ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy