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

mtons.freemarker.handler.HttpParameterHandler Maven / Gradle / Ivy

/*
+--------------------------------------------------------------------------
|   Mtons [#RELEASE_VERSION#]
|   ========================================
|   Copyright (c) 2014, 2015 mtons. All Rights Reserved
|   http://www.mtons.com
+---------------------------------------------------------------------------
*/
package mtons.freemarker.handler;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import mtons.freemarker.json.MappingJsonValue;
import mtons.freemarker.utils.TemplateModelUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;


/**
 * 接口指令处理
 * Created by langhsu on 2015/11/26.
 */
public class HttpParameterHandler extends BaseHandler {
    private Log log = LogFactory.getLog(this.getClass());

    private MediaType mediaType;
    private HttpMessageConverter messageConverter;
    private Map parameterMap;
    private HttpServletRequest request;
    private ServletServerHttpResponse response;
    private String callback;

    public HttpParameterHandler(HttpMessageConverter httpMessageConverter, MediaType mediaType,
                                String callback, HttpServletRequest request, HttpServletResponse response) {
        this.messageConverter = httpMessageConverter;
        this.parameterMap = request.getParameterMap();
        this.callback = callback;
        this.request = request;
        this.response = new ServletServerHttpResponse(response);
        this.mediaType = mediaType;
    }

    @Override
    public void render() throws Exception {
        MappingJsonValue jsonValue = new MappingJsonValue(map);
        jsonValue.setJsonp(callback);
        jsonValue.setStatus(MappingJsonValue.OK);
        messageConverter.write(jsonValue, mediaType, response);
    }

    @Override
    public void renderString(String text) throws Exception {
        response.getBody().write(text.getBytes());
        response.getBody().flush();
//        messageConverter.write(text, mediaType, response);
    }

    @Override
    public void renderIfNotNull(Object object) throws Exception {
        if (null != object) {
            render();
        } else {
            MappingJsonValue jsonValue = new MappingJsonValue("not found");
            jsonValue.setJsonp(callback);
            jsonValue.setStatus(MappingJsonValue.ERROR);
            messageConverter.write(jsonValue, mediaType, response);
        }
    }

    @Override
    public String getString(String name) throws Exception {
        String[] values = parameterMap.get(name);
        if (ArrayUtils.isNotEmpty(values)) {
            return values[0];
        }
        return null;
    }

    @Override
    public Integer getInteger(String name) throws Exception {
        String result = getString(name);
        if (null != result) {
            try {
                return Integer.valueOf(result);
            } catch (NumberFormatException e) {
                log.debug(e.getMessage());
            }
        }
        return null;
    }

    @Override
    public Short getShort(String name) throws Exception {
        String result = getString(name);
        if (null != result) {
            try {
                return Short.valueOf(result);
            } catch (NumberFormatException e) {
                log.debug(e.getMessage());
            }
        }
        return null;
    }

    @Override
    public Long getLong(String name) throws Exception {
        String result = getString(name);
        if (null != result) {
            try {
                return Long.valueOf(result);
            } catch (NumberFormatException e) {
                log.debug(e.getMessage());
            }
        }
        return null;
    }

    @Override
    public Double getDouble(String name) throws Exception {
        String result = getString(name);
        if (null != result) {
            try {
                return Double.valueOf(result);
            } catch (NumberFormatException e) {
                log.debug(e.getMessage());
            }
        }
        return null;
    }

    @Override
    public String[] getStringArray(String name) throws Exception {
        String[] values = parameterMap.get(name);
        if (ArrayUtils.isNotEmpty(values) && 1 == values.length && 0 <= values[0].indexOf(",")) {
            return StringUtils.split(values[0], ',');
        }
        return values;
    }

    @Override
    public Boolean getBoolean(String name) throws Exception {
        String result = getString(name);
        if (null != result) {
            try {
                return Boolean.valueOf(result);
            } catch (NumberFormatException e) {
                log.debug(e.getMessage());
            }
        }
        return null;
    }

    @Override
    public Date getDate(String name) throws Exception {
        String result = getString(name);
        if (null != result) {
            String temp = StringUtils.trimToEmpty(result);
            return TemplateModelUtils.parseDate(temp);
        }
        return null;
    }

    @Override
    public String getContextPath() {
        return request.getContextPath();
    }

}