HttpServletRequest 执行过reader之后,无法向下传的解决方法

该方法只能通过filter的方式向下传,目前不清楚怎么使用interceptor处理

String requestParamJson = readAsChars(req);
// 重新封装request
CustomHttpWrapper wrapper = new CustomHttpWrapper(req, requestParamJson);
chain.doFilter(wrapper, res);
// 重写 HttpServletRequest 的方法
public class CustomHttpWrapper extends HttpServletRequestWrapper {

    private final String paramJson;

    public DecryptHttpWrapper(HttpServletRequest request, String json) {
        super(request);
        this.paramJson = json;
    }
  
    public String getContentType() {
        return contentType == null ? getRequest().getContentType(): contentType;
    }

    public ServletInputStream getInputStream() throws IOException {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
            return new ServletInputStream() {
                @Override
                public boolean isFinished() {
                    return false;
                }

                @Override
                public boolean isReady() {
                    return false;
                }

                @Override
                public void setReadListener(ReadListener readListener) {
                }

                @Override
                public int read() {
                    return inputStream.read();
                }
            };

    }
    public BufferedReader getReader() {
        return IOUtils.toBufferedReader(new StringReader(this.paramJson));
    }
    public int getContentLength() {
        return paramJson.length();
    }
}

// 获取request里的请求数据
public static String readAsChars(HttpServletRequest request) {
    String contentType = request.getContentType();
    if (StringUtils.isNotBlank(contentType) && contentType.toLowerCase().contains("application/json")) {
//        if ("application/json".equals(request.getContentType())) {
//            BufferedReader streamReader = request.getReader();
        BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8));
        StringBuilder responseStrBuilder = new StringBuilder();
        String inputStr;
        while ((inputStr = streamReader.readLine()) != null)
            responseStrBuilder.append(inputStr);

        return responseStrBuilder.toString();
    } else {
        return JsonUtil.toJson(request.getParameterMap());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值