过滤器中获取json数据

过滤器中获取json数据

判断是不是 json请求

 //获取json
   HttpServletRequest request = (HttpServletRequest) servletRequest;
        String contentType = request.getContentType();
        String paramJson = "";
        if ("application/json; charset=UTF-8".equals(contentType)) {
            paramJson = this.getJsonParam((HttpServletRequest) servletRequest);
        }

获取json数据



    /**
     * 获取Json数据
     *
     * @param request
     * @return
     */
    private String getJsonParam(HttpServletRequest request) {

        String jsonParam = "";
        ServletInputStream inputStream = null;
        try {
            int contentLength = request.getContentLength();
            if (!(contentLength < 0)) {
                byte[] buffer = new byte[contentLength];
                inputStream = request.getInputStream();
                for (int i = 0; i < contentLength; ) {
                    int len = inputStream.read(buffer, i, contentLength);
                    if (len == -1) {
                        break;
                    }
                    i += len;
                }
                jsonParam = new String(buffer, "utf-8");
            }
        } catch (IOException e) {
            log.error("参数转换成json异常g{}", e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    log.error("参数转换成json异常s{}", e);
                }
            }
        }
        return jsonParam;
    }

返回json

 HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json; charset=utf-8");
        String result = "";

        PrintWriter writer = null;
        try {
            writer = response.getWriter();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            writer.print(result);
            writer.flush();
            writer.close();
        }

完整代码

package cn.udeam.common.filter;


import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.util.StringUtils;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

import static cn.udeam.common.tools.HttpUtil.CONTENT_TYPE_JSON;

/**
 * 过滤器  
 *
 * @author tizzy
 */
@Slf4j
public class ConfigFilter implements Filter {


    @Override
    public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {


        log.info("============  正在进入过滤器 ============= ");

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json; charset=utf-8");
        
        String result = "";
        //获取url
        String requestUrl = request.getRequestURI();
        log.info("============  当前请求 url为  ============= {} ", requestUrl);
        String jsonParam = getJsonParam(request);
        log.info(" 请求 json 数据为  : {} ", jsonParam);
        if (!StringUtils.isEmpty(requestUrl)) {

            //根据url去查询模板配置
            ..... 业务逻辑 .....

            if (firstByUrl == null || firstByUrl.getSuBurl().equals(requestUrl)) {

                ReturnMessage returnMessage = new ReturnMessage();
                returnMessage.setCode(-555);
                returnMessage.setMsg("非法请求或暂无此 url! ");
                result = JSON.toJSONString(returnMessage);

            } else {

                jsonParam = getJsonParam(request);
                log.info(" 请求 json 数据为  : {} ", jsonParam);
                result = HttpUtil.post(firstByUrl.getUrl(), jsonParam, "utf-8", CONTENT_TYPE_JSON);
                log.info(" 请求返回结果 : {} ", result);
            }


        }

        PrintWriter writer = null;
        try {
            writer = response.getWriter();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            writer.print(result);
            writer.flush();
            writer.close();
        }

//        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }


    /**
     * 获取Json数据
     *
     * @param request
     * @return
     */
    private String getJsonParam(HttpServletRequest request) {

        String jsonParam = "";
        ServletInputStream inputStream = null;
        try {
            int contentLength = request.getContentLength();
            if (!(contentLength < 0)) {
                byte[] buffer = new byte[contentLength];
                inputStream = request.getInputStream();
                for (int i = 0; i < contentLength; ) {
                    int len = inputStream.read(buffer, i, contentLength);
                    if (len == -1) {
                        break;
                    }
                    i += len;
                }
                jsonParam = new String(buffer, "utf-8");
            }
        } catch (IOException e) {
            log.error("参数转换成json异常g{}", e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    log.error("参数转换成json异常s{}", e);
                }
            }
        }
        return jsonParam;
    }


}

发布了241 篇原创文章 · 获赞 66 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_38361347/article/details/104502997