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

com.dahua.eco.base.spring.web.BaseController Maven / Gradle / Ivy

package com.dahua.eco.base.spring.web;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.dahua.eco.base.core.code.IErrorCode;
import com.dahua.eco.base.core.common.result.RestResult;
import com.dahua.eco.base.core.constant.EncodingType;
import com.dahua.eco.base.core.exception.custom.ValidException;
import com.github.pagehelper.Page;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.List;

public class BaseController {
    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    protected ApplicationContext applicationContext;


    /**
     * 从response中获取io对象
     *
     * @param response
     * @return
     */
    protected PrintWriter getWriter(HttpServletResponse response) {
        if (response == null)
            return null;

        PrintWriter writer = null;
        try{
            writer = response.getWriter();
        }catch(Exception e){
            logger.error("io exception", e);
        }

        return writer;
    }

    /**
     * 从请求参数中获取mybatis plus分页对象
     *
     * @param jsonObject
     * @return
     */
    protected  Page getPage(JSONObject jsonObject) {
        Page page = new Page<>();

        Integer pageSize = jsonObject.getInteger("pageSize");
        Integer pageNum = jsonObject.getInteger("pageNum");
        if (pageSize != null) {
            page.setPages(jsonObject.getInteger("pageSize"));
        }
        if (pageNum != null) {
            page.setPageNum(jsonObject.getInteger("pageNum"));
        }

        return page;
    }

    /**
     * send the string message back
     *
     * @param returnResult
     * @param response
     */
    protected void writeAjaxResponse(String returnResult,HttpServletResponse response){
        PrintWriter writer = getWriter(response);
        if(writer==null || returnResult==null){
            return;
        }
        try {
            writer.write(returnResult);
        } finally{
            writer.flush();
            writer.close();
        }
    }

    /**
     * send the ajax response back to the client side.
     *
     * @param responseObj
     * @param writer
     */
    protected void writeAjaxJSONResponse(Object responseObj,PrintWriter writer) {
        if(writer==null || responseObj==null) {
            return;
        }
        try {
            SerializerFeature[] serializerFeatures = { SerializerFeature.DisableCircularReferenceDetect };
            writer.write(JSON.toJSONString(responseObj, serializerFeatures));
        } finally{
            writer.flush();
            writer.close();
        }
    }

    /**
     * 输出所有参数,包括值为null的
     * @param responseObj
     * @param writer
     */
    protected void writeAllParamAjaxJSONResponse(Object responseObj,PrintWriter writer){
        if(writer==null || responseObj==null){
            return;
        }
        try {
            SerializerFeature[] serializerFeatures = {SerializerFeature.WriteMapNullValue};
            writer.write(JSON.toJSONString(responseObj, serializerFeatures));
        } finally{
            writer.flush();
            writer.close();
        }
    }

    /**
     * send the ajax response back to the client side. DisableCircularReferenceDetect true or false
     *
     * @param responseObj
     * @param cirReferDetect
     */
    protected void writeAjaxJSONResponse(Object responseObj ,HttpServletResponse response , boolean cirReferDetect){
        PrintWriter writer = getWriter(response);
        if(writer==null || responseObj==null){
            return;
        }
        try {
            if(!cirReferDetect){
                writeAjaxJSONResponse(responseObj , writer) ;
                return;
            }
            writer.write(JSON.toJSONString(responseObj));
        } finally{
            if(writer!=null){
                writer.flush();
                writer.close();
            }
        }
    }

    /**
     * send the ajax response back to the client side (Date object
     * will be formatted as per the given dateFormat).
     *
     * @param responseObj
     * @param writer
     * @param dateFormat
     */
    protected void writeAjaxJSONResponseWithDateFormat(Object responseObj,PrintWriter writer,String dateFormat) {
        if (writer==null || responseObj==null || dateFormat == null) {
            return;
        }

        try {
            writer.write(JSON.toJSONStringWithDateFormat(responseObj, dateFormat,SerializerFeature.DisableCircularReferenceDetect));
        } finally{
            writer.flush();
            writer.close();
        }
    }

    /**
     * description:send the ajax response back to the client side.
     *
     * @param responseObj
     * @param response
     */
    protected void writeAjaxJSONResponse(Object responseObj, HttpServletResponse response) {
        response.setCharacterEncoding(EncodingType.ENCODING_UTF_8);
        response.setHeader("Content-Type", "application/json");
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies.

        PrintWriter writer = getWriter(response);
        writeAjaxJSONResponse(responseObj, writer);
    }

    protected void writeAjaxJSONResponse(Object responseObj,boolean containNull,HttpServletResponse response) {
        response.setCharacterEncoding(EncodingType.ENCODING_UTF_8);
        response.setHeader("Content-Type", "application/json");
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies.

        PrintWriter writer = getWriter(response);
        if (containNull){
            writeAllParamAjaxJSONResponse(responseObj, writer);
        } else {
            writeAjaxJSONResponse(responseObj, writer);
        }
    }

    protected void writeAjaxJSONErrorResponse(Object responseObj, HttpServletResponse response) {
        response.setCharacterEncoding(EncodingType.ENCODING_UTF_8);
        response.setHeader("Content-Type", "application/json");
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies.

        PrintWriter writer = getWriter(response);
        writeAllParamAjaxJSONResponse(responseObj, writer);
    }

    protected void writeJSONResponseForUpload(Object responseObj,HttpServletResponse response) {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = getWriter(response);
        writeAjaxJSONResponse(responseObj, writer);
    }

    /**
     * send the ajax response back to the client side (Date object
     * will be formatted as per the given dateFormat).
     *
     * @param responseObj
     * @param response
     * @param dateFormat
     */
    protected void writeAjaxJSONResponseWithDateFormat(Object responseObj,HttpServletResponse response,String dateFormat) {
        response.setCharacterEncoding(EncodingType.ENCODING_UTF_8);
        response.setHeader("Content-Type", "application/json");
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies.
        PrintWriter writer = getWriter(response);
        if (dateFormat != null) {
            writeAjaxJSONResponseWithDateFormat(responseObj, writer, dateFormat);
        } else {
            writeAjaxJSONResponse(responseObj, writer);
        }
    }

    /**
     * 下载错误信息
     * @param fileName
     * @param request
     * @param response
     * @throws IOException
     */
    protected void exportError(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
        InputStream in=null;
        OutputStream out=null;
        try{
            response.setContentType("application/vnd.ms-excel;charset=gb2312");
            response.setHeader("Content-disposition", "attachment; filename=" + fileName+ ".xlsx");
            String path = request.getServletContext().getRealPath("");
            path += fileName+".xlsx";
            in = new FileInputStream(path);
            out = response.getOutputStream();
            int b;
            while((b=in.read())!=-1)
                out.write(b);
        } finally {
            if(in!=null){
                in.close();
            }if(out!=null){
                out.close();
            }
        }
    }

    protected void validData(BindingResult result, HttpServletResponse response) throws ValidException{
        if(result.hasErrors()){
            List errorses=result.getAllErrors();
            throw new ValidException(errorses.get(0).getDefaultMessage());
        }
    }

    protected void closeOutputStream(OutputStream outputStream){
        if(outputStream!=null){
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * get session
     * @param request
     * @return
     */
    protected HttpSession getSession(HttpServletRequest request) {
        return request.getSession();
    }

    /**
     * 是否IE请求
     * @param request
     * @return
     */
    protected boolean isIERequest(HttpServletRequest request) {
        String userAgent ="";
        try {
            userAgent = request.getHeader("user-agent").toLowerCase();
        } catch (Exception e) {}

        if(!StringUtils.isEmpty(userAgent) && (userAgent.contains("msie")||userAgent.contains("like gecko"))) {//IE
            return true;

        }
        return false;
    }

    protected void uploadBatchResponse(Object responseObj, boolean containNull, HttpServletResponse response) {
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies.

        PrintWriter writer = getWriter(response);
        if(containNull){
            writeAllParamAjaxJSONResponse(responseObj, writer);
        }else{
            writeAjaxJSONResponse(responseObj, writer);
        }
    }

    /**
     * 事件发布
     * @param event
     */
    protected void publishEvent(ApplicationEvent event){
        applicationContext.publishEvent(event);
    }

    protected RestResult successResult(Object data){
        RestResult result = RestResult.createSuccessfulResult(data);
        return result;
    }

    protected RestResult successResult(String key, Object value){
        RestResult result = new RestResult();
        result.addJsonValue(key, value);
        return result;
    }

    protected RestResult faultResult(IErrorCode code) {
        RestResult result = RestResult.createFailedResult(code.getCode(), code.getI18nMessage());
        return result;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy