ModelTools.java 7.41 KB
package com.ectrip.trips.net;

import com.alibaba.fastjson.JSON;
import com.ectrip.cyt.bean.BaseRequest;
import com.ectrip.cyt.bean.BaseResponse;
import com.ectrip.cyt.bean.DataTranfer;
import com.ectrip.cyt.utils.Base64;
import com.ectrip.cyt.utils.LogUtil;
import com.ectrip.cyt.utils.SignTools;


/**
 * This is a tool class for Check Ticket Http
 * Created by lingkitho on 2017/3/1.
 */
public class ModelTools {

    /**
     * 解析请求体 - 将Http请求转换成Bean对象
     * @param rawData 原始数据
     * @param clazz   类模板
     * @return Bean 对象
     */
    public static <T> T parseRequest(String rawData, Class<T> clazz) throws Exception {


        DataTranfer dataTranfer = null;
        String param;//请求数据
        try {
            dataTranfer = JSON.parseObject(rawData,DataTranfer.class);
            if(null == dataTranfer){
                throw new Exception("原始数据为空!");
            }
            if(null == dataTranfer.getSigned()){
                throw new Exception("签名为空!");
            }
            boolean isOk = SignTools.chechSign(dataTranfer.getSigned(),dataTranfer.getData());
            if(!isOk){
                throw new Exception("签名验证失败!");
            }

        } catch (Exception e) {
            throw new Exception("原始数据json格式不正确!"+ LogUtil.getExMsg(e));
        }
        try {
            byte[] requestDataJson = Base64.decode(dataTranfer.getData());
            param = new String(requestDataJson);
        } catch (Exception e) {
            throw new Exception("请求数据解密失败!请勿篡改数据。请检查参数!");
        }
        if(null != param && param.length()>0) {
            try {
                BaseResponse response = JSON.parseObject(param,BaseResponse.class);
                if(response != null && response.getData() != null){
                    T obj = JSON.parseObject(response.getData().toString(), clazz);
                    LogUtil.i("CHECK","【请求数据返回成功】ResultBean="+response.getData().toString());
                    if(null == obj){
                        throw new Exception("转换后的请求实体为null,请检查参数");
                    }
                    return obj;
                }
                return  null;
            } catch (Exception e) {
                throw new Exception("json实体转换错误。请检查参数,且确保参数与接口对应");
            }
        }else{
            return null;
        }
    }

    public static BaseResponse parseRequestFace(String rawData) throws Exception {
        BaseResponse response = null;

        DataTranfer dataTranfer = null;
        String param;//请求数据
        try {
            dataTranfer = JSON.parseObject(rawData,DataTranfer.class);
            if(null == dataTranfer){
                throw new Exception("原始数据为空!");
            }
            if(null == dataTranfer.getSigned()){
                throw new Exception("签名为空!");
            }
            boolean isOk = SignTools.chechSign(dataTranfer.getSigned(),dataTranfer.getData());
            if(!isOk){
                throw new Exception("签名验证失败!");
            }

        } catch (Exception e) {
            throw new Exception("原始数据json格式不正确!"+ LogUtil.getExMsg(e));
        }
        try {
            byte[] requestDataJson = Base64.decode(dataTranfer.getData());
            param = new String(requestDataJson);
        } catch (Exception e) {
            throw new Exception("请求数据解密失败!请勿篡改数据。请检查参数!");
        }
        if(null != param && param.length()>0) {
            try {
                response = JSON.parseObject(param,BaseResponse.class);
//                if(response != null && response.getData() != null){
////                    T obj = JSON.parseObject(response.getData().toString(), clazz);
////                    T obj  = (T)response.getData();
//                    LogUtil.i("CHECK","【请求数据返回成功】ResultBean="+response.getData().toString());
//                    if(null == obj){
//                        throw new Exception("转换后的请求实体为null,请检查参数");
//                    }
//                    return obj;
//                }
                return  response;
            } catch (Exception e) {
                throw new Exception("json实体转换错误。请检查参数,且确保参数与接口对应");
            }
        }else{
            return null;
        }
    }


    /**
     * 解析请求体 - 将Http请求转换成Bean对象
     * @param rawData 原始数据
     * @param clazz   类模板
     * @return Bean 对象
     */
    public static <T> T parseBaseRequest(String rawData, Class<T> clazz) throws Exception {

        DataTranfer dataTranfer = null;
        String param;//请求数据
        try {
            dataTranfer = JSON.parseObject(rawData,DataTranfer.class);
            if(null == dataTranfer){
                throw new Exception("原始数据为空!");
            }
            if(null == dataTranfer.getSigned()){
                throw new Exception("签名为空!");
            }
            boolean isOk = SignTools.chechSign(dataTranfer.getSigned(),dataTranfer.getData());
            if(!isOk){
                throw new Exception("签名验证失败!");
            }

        } catch (Exception e) {
            throw new Exception("原始数据json格式不正确!"+ LogUtil.getExMsg(e));
        }
        try {
            byte[] requestDataJson = Base64.decode(dataTranfer.getData());
            param = new String(requestDataJson);
        } catch (Exception e) {
            throw new Exception("请求数据解密失败!请勿篡改数据。请检查参数!");
        }
        if(null != param && param.length()>0) {
            try {
                    T obj = JSON.parseObject(param, clazz);
                    if(null == obj){
                        throw new Exception("转换后的请求实体为null,请检查参数");
                    }
                    return obj;
            } catch (Exception e) {
                throw new Exception("json实体转换错误。请检查参数,且确保参数与接口对应");
            }
        }else{
            return null;
        }
    }

    public static String getParam (BaseRequest data , String method){
        String dataJson = JSON.toJSONString(data);//将请求的实体转换成json字符串
        String dataBase64 = Base64.encode(dataJson.getBytes());//将字符串进行base64加密
        String signed = SignTools.getSign(dataBase64);//获得签名
        DataTranfer dataTranfer = new DataTranfer();//封装到body的实体
        dataTranfer.setData(dataBase64);//将base64的加密串作为data
        dataTranfer.setSigned(signed);//设置签名
        dataTranfer.setMethod(method);//设置方法名

        String param = JSON.toJSONString(dataTranfer);
        return param;
    }
    public static String getParamFace (String dataBase64 , String method){
        String signed = SignTools.getSign(dataBase64);//获得签名
        DataTranfer dataTranfer = new DataTranfer();//封装到body的实体
        dataTranfer.setData(dataBase64);//将base64的加密串作为data
        dataTranfer.setSigned(signed);//设置签名
        dataTranfer.setMethod(method);//设置方法名

        String param = JSON.toJSONString(dataTranfer);
        return param;
    }
}