栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

解决request.getReader()为空情况

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决request.getReader()为空情况

			ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper(request);
            BufferedReader reader = requestWrapper.getReader();
            StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = reader.readLine()) != null) {
                stringBuffer.append(line);
            }

ParameterRequestWrapper 是我自己写的一个requst请求继承了HttpServletRequestWrapper

import com.alibaba.fastjson.JSON;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;


public class ParameterRequestWrapper extends HttpServletRequestWrapper {

    private Map params = new HashMap<>();

    
    public ParameterRequestWrapper(HttpServletRequest request) {
        super(request);
        //将参数表,赋予给当前的Map以便于持有request中的参数
        this.params.putAll(request.getParameterMap());
    }

    

    public ParameterRequestWrapper(HttpServletRequest request, Map extendParams) {
        this(request);
        //这里将扩展参数写入参数表
        addAllParameters(extendParams);
    }

    
    @Override
    public Enumeration getParameterNames() {
        return new Vector(params.keySet()).elements();
    }

    
    @Override
    public String getParameter(String name) {
        String[] values = params.get(name);
        if (values == null || values.length == 0) {
            return null;
        }
        return values[0];
    }

    @Override
    public String[] getParameterValues(String name) {
        String[] values = params.get(name);
        if (values == null || values.length == 0) {
            return null;
        }
        return values;
    }

    
    public void addAllParameters(Map otherParams) {
        for (Map.Entry entry : otherParams.entrySet()) {
            addParameter(entry.getKey(), entry.getValue());
        }
    }

    
    public void addParameter(String name, Object value) {
        if (value != null) {
            if (value instanceof String[]) {
                params.put(name, (String[]) value);
            } else if (value instanceof String) {
                params.put(name, new String[]{(String) value});
            } else {
                params.put(name, new String[]{JSON.toJSONString(value)});
            }
        }
    }
}

解决思路:
既然requst请求读取后再次读取指向已经不一样,干脆直接用一个自己new出来的requst进行读取,把数据赋给自己new出来的requst,再次请求,拿到的值还是对的,而不是空。

注意:
用reader.reader()并不好用,会出现有数据却不读情况,慎重!!!

解决办法比较新奇,仅供借鉴,有啥好方法欢迎指导。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273467.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号