zoukankan      html  css  js  c++  java
  • 得到RequestVO

    import java.io.IOException;
    import java.nio.charset.Charset;
    
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    import org.apache.log4j.Logger;
    import org.springframework.util.StreamUtils;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    
    import com.alibaba.fastjson.JSONObject;
    import com.alibaba.fastjson.parser.Feature;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.yundaex.common.basic.vo.RequestVO;
    import com.yundaex.common.basic.vo.UserContext;
    import com.yundaex.common.bidiboxing.constants.CommunicationConstants;
    import com.yundaex.common.bidiboxing.convert.PayloadConvertException;
    import com.yundaex.common.exception.WrappedIOException;
    import com.yundaex.utility.json.YDJSONConvertException;
    import com.yundaex.utility.protobuf.ProtobufUtils;
    import com.yundaex.utility.xml.XMLUtils;
    
    
    public class HttpHelper {
        
        //logger for class HttpHelper
        private static final Logger logger = 
                Logger.getLogger(HttpHelper.class);
        
        /**
         * generate requestVO from http servlet request
         * */
        public static RequestVO generateRequestVO(HttpServletRequest request) {
            RequestVO requestVO = null;
            // get request vo from request
            Object attribute = request.getAttribute("requestVO");
            if (attribute != null && RequestVO.class.isInstance(attribute)) {
                requestVO = (RequestVO) attribute;
            } else {
                String payloadFormat = getPayloadFormat(request);
                String voStr = request.getParameter("payload");
                if (null == voStr && !CommunicationConstants.DATA_DIALECT_PROTOBUF.equals(payloadFormat)) {
                    try {
                        Charset charset = Charset.forName("UTF-8");
                        ServletInputStream inputStream = request.getInputStream();
                        voStr = StreamUtils.copyToString(inputStream, charset);
                    } catch (IOException e) {
                        throw new YDJSONConvertException("payload convert exception,couldn't convert to bean");
                    }
                }
                if (null != voStr) {
                    if (logger.isDebugEnabled()) {
                        logger.debug(voStr);
                    }
                    if (StringUtils.isEmpty(voStr)) {
                        requestVO = new RequestVO();
                    }
                    if ( !StringUtils.isEmpty(voStr) && CommunicationConstants.DATA_DIALECT_JSON.equals(payloadFormat)) {
                        try{
                            Feature[] features = {Feature.SortFeidFastMatch};
                            requestVO =  JSONObject.parseObject(voStr, RequestVO.class, features);
                        } catch(Exception e) {
                            throw new PayloadConvertException("JSON数据不合法,无法解析。");
                        }
                        
                    }
                    if (!StringUtils.isEmpty(voStr) && CommunicationConstants.DATA_DIALECT_XML.equals(payloadFormat)) {
                        requestVO = XMLUtils.unmarshall(voStr, RequestVO.class);
                    }
                }
                if (null == voStr && CommunicationConstants.DATA_DIALECT_PROTOBUF.equals(payloadFormat)) {
                    ServletInputStream inputStream = null;
                    try {
                        inputStream = request.getInputStream();
                    } catch (IOException e) {
                        throw new WrappedIOException();
                    }
                    requestVO = ProtobufUtils.unmarshal(inputStream, RequestVO.class);
                }
                if (requestVO != null) {
                    requestVO.setFormat(payloadFormat);
                    if (null == requestVO.getUserContext()) {
                        requestVO.setUserContext(UserContext.constructEmptyUserContext());
                    }
                    requestVO.getUserContext().setDialect(payloadFormat);
                    request.setAttribute("requestVO", requestVO);
                } else {
                    throw new YDJSONConvertException("payload is blank,couldn't convert to bean");
                }
            }
            return requestVO;
        }
        
        private static String getPayloadFormat(HttpServletRequest request) {
            if (request.getContentType() != null) {
                // System.out.println(request.getContentType());
                if (request.getContentType().contains("application/json")) {
                    return CommunicationConstants.DATA_DIALECT_JSON;
                } else if (request.getContentType().contains("application/xml")) {
                    return CommunicationConstants.DATA_DIALECT_XML;
                } else if (request.getContentType().contains("application/x-protobuf")) {
                    return CommunicationConstants.DATA_DIALECT_PROTOBUF;
                } else if (request.getContentType().contains("multipart/form-data")) {
                    if(logger.isDebugEnabled()) {
                        logger.debug(request.getClass());
                    }
                    if(HttpServletRequestWrapper.class.isAssignableFrom(request.getClass())) {
                        HttpServletRequestWrapper httpServletRequestWrapper = (HttpServletRequestWrapper) request;
                        request = (HttpServletRequest) httpServletRequestWrapper.getRequest();
                    }
                    if (MultipartHttpServletRequest.class.isAssignableFrom(request.getClass())) {
                        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                        String format = multiRequest.getParameter("format");
                        if (format == null || format.equalsIgnoreCase(CommunicationConstants.DATA_DIALECT_JSON)) {
                            return CommunicationConstants.DATA_DIALECT_JSON;
                        }
                        if (format.equalsIgnoreCase(CommunicationConstants.DATA_DIALECT_XML)) {
                            return CommunicationConstants.DATA_DIALECT_XML;
                        }
                        if (format.equalsIgnoreCase(CommunicationConstants.DATA_DIALECT_PROTOBUF)) {
                            return CommunicationConstants.DATA_DIALECT_PROTOBUF;
                        }
                    }
                }
            }
            return CommunicationConstants.DATA_DIALECT_JSON;
        }
    }
    import java.util.Date;
    
    public class RequestVO {
        
        private Object data;
        
        private String validation;
        
        private String format;
        
        private String username;
        
        private Date dateTime;
        
        private UserContext userContext;
        
        public String getFormat() {
            return format;
        }
    
        public void setFormat(String format) {
            this.format = format;
        }
        
        public String getValidation() {
            return validation;
        }
    
        public void setValidation(String validation) {
            this.validation = validation;
        }
        
        /**
         * @return the userContext
         */
        public UserContext getUserContext() {
            return userContext;
        }
        
        /**
         * @param userContext the userContext to set
         */
        public void setUserContext(UserContext userContext) {
            this.userContext = userContext;
        }
    
        /**
         * @return the username
         */
        public String getUsername() {
            return username;
        }
    
        /**
         * @param username the username to set
         */
        public void setUsername(String username) {
            this.username = username;
        }
    
        /**
         * @return the data
         */
        public Object getData() {
            return data;
        }
    
        /**
         * @param data the data to set
         */
        public void setData(Object data) {
            this.data = data;
        }
    
        public Date getDateTime() {
            return dateTime;
        }
    
        public void setDateTime(Date dateTime) {
            this.dateTime = dateTime;
        }
        
    }
    public interface CommunicationConstants {
        
        public static final String DATA_DIALECT_JSON = "json";
        
        public static final String DATA_DIALECT_XML = "xml";
        
        public static final String DATA_DIALECT_PROTOBUF = "protobuf";
        
        
    }
    public class UserContext {
        
        //auto calculate
        private Long userId;
        
        //copy form request vo
        private String username;
        
        private String userProp;
        
        private Long domainId;
        
        //auto calculate
        private String userType;
        
        //auto calculate;from contentTypoe;never transform
        private String dialect;
        
        //optional ;support for multi-timezone 
        private Integer timeZone;
        
        //required;transform
        private Integer curOrganization;
        
        //optional;support gb_rbac;transform
        private Integer curGroup;
        
        //auto calculate. default is RBAC,optional.
        private String pmModel;
        
        private String msg;
        
        private String appKey;
        
        // API 接口名称
        private String method;
        
        //设备类型
        private String deviceType;
        
        /**
         * @return the dialect
         */
        public String getDialect() {
            return dialect;
        }
    
        /**
         * @param dialect the dialect to set
         */
        public void setDialect(String dialect) {
            this.dialect = dialect;
        }
    
        /**
         * @return the timeZone
         */
        public Integer getTimeZone() {
            return timeZone;
        }
    
        /**
         * @param timeZone the timeZone to set
         */
        public void setTimeZone(Integer timeZone) {
            this.timeZone = timeZone;
        }
    
        /**
         * @return the userId
         */
        public Long getUserId() {
            return userId;
        }
    
        /**
         * @param userId the userId to set
         */
        public void setUserId(Long userId) {
            this.userId = userId;
        }
        
        public static UserContext constructEmptyUserContext(){
            UserContext emptyContext = new UserContext();
            return emptyContext;
        }
    
        /**
         * @return the username
         */
        public String getUsername() {
            return username;
        }
    
        /**
         * @param username the username to set
         */
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getUserProp() {
            return userProp;
        }
    
        public void setUserProp(String userProp) {
            this.userProp = userProp;
        }
    
        /**
         * @return the userType
         */
        public String getUserType() {
            return userType;
        }
    
        /**
         * @param userType the userType to set
         */
        public void setUserType(String userType) {
            this.userType = userType;
        }
    
        /**
         * @return the pmModel
         */
        public String getPmModel() {
            return pmModel;
        }
    
        /**
         * @param pmModel the pmModel to set
         */
        public void setPmModel(String pmModel) {
            this.pmModel = pmModel;
        }
    
        /**
         * @return the curGroup
         */
        public Integer getCurGroup() {
            return curGroup;
        }
    
        /**
         * @param curGroup the curGroup to set
         */
        public void setCurGroup(Integer curGroup) {
            this.curGroup = curGroup;
        }
    
        /**
         * @return the curOrganization
         */
        public Integer getCurOrganization() {
            return curOrganization;
        }
    
        /**
         * @param curOrganization the curOrganization to set
         */
        public void setCurOrganization(Integer curOrganization) {
            this.curOrganization = curOrganization;
        }
    
        /**
         * @return the msg
         */
        public String getMsg() {
            return msg;
        }
    
        /**
         * @param msg the msg to set
         */
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        /**
         * @return the appKey
         */
        public String getAppKey() {
            return appKey;
        }
    
        /**
         * @param appKey the appKey to set
         */
        public void setAppKey(String appKey) {
            this.appKey = appKey;
        }
    
        /**
         * @return the method
         */
        public String getMethod() {
            return method;
        }
    
        /**
         * @param method the method to set
         */
        public void setMethod(String method) {
            this.method = method;
        }
    
        /**
         * @return the domainId
         */
        public Long getDomainId() {
            return domainId;
        }
    
        /**
         * @param domainId the domainId to set
         */
        public void setDomainId(Long domainId) {
            this.domainId = domainId;
        }
    
        public String getDeviceType() {
            return deviceType;
        }
    
        public void setDeviceType(String deviceType) {
            this.deviceType = deviceType;
        }
    }
  • 相关阅读:
    《那些年啊,那些事——一个程序员的奋斗史》——48
    《那些年啊,那些事——一个程序员的奋斗史》——49
    《那些年啊,那些事——一个程序员的奋斗史》——47
    《那些年啊,那些事——一个程序员的奋斗史》——46
    《那些年啊,那些事——一个程序员的奋斗史》——46
    如何面对单调重复的任务
    几则关于glibc的locale的笔记
    欢迎大家加入Linux Mobile Research圈子
    Idle函数的三大用途
    几则gdb使用技巧
  • 原文地址:https://www.cnblogs.com/tonggc1668/p/6543959.html
Copyright © 2011-2022 走看看