HTTP - Get / Post 请求中,URL & FORM 参数如何分别获取?
发布日期:2021-06-30 23:28:39
浏览次数:2
分类:技术文章
本文共 4477 字,大约阅读时间需要 14 分钟。
我们都知道在 HttpServletRequest 中,URL 和 FORM 参数共存时,都会出现在 getParameterMap() 方法中,由于一些业务需要区分这两者,笔者研究了下它的类,其实也可以找到各自的区分的办法,如下。
package com.chinadaas.platform.servicecenter.mycommon.handler; import com.alibaba.fastjson.JSON;import com.google.common.collect.Maps;import lombok.Getter;import lombok.Setter;import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;import javax.servlet.ReadListener;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.Part;import java.io.*;import java.nio.charset.Charset;import java.util.Collection;import java.util.Map;import java.util.Objects; @Getter@Setterpublic class RequestHandler extends HttpServletRequestWrapper { private String rawJson; private String form; private String query; public static RequestHandler getInstance(HttpServletRequest request) { if (request instanceof StandardMultipartHttpServletRequest) { request = ((StandardMultipartHttpServletRequest) request).getRequest(); } return (RequestHandler)request; } public RequestHandler(HttpServletRequest request) throws IOException { super(request); StringBuilder sb = new StringBuilder(); InputStream ins = request.getInputStream(); BufferedReader isr = null; try{ // rawJson case if(ins != null){ isr = new BufferedReader(new InputStreamReader(ins, Charset.defaultCharset())); char[] charBuffer = new char[128]; int readCount; while((readCount = isr.read(charBuffer)) != -1){ sb.append(charBuffer,0,readCount); } setRawJson(sb.toString()); } // check getParameterMap MaptParamMap = request.getParameterMap(); if (!(Objects.nonNull(tParamMap) && tParamMap.size() > 0)) { return; } Map paramMap = Maps.newHashMap(); tParamMap.entrySet().forEach(param -> { /* Array T String */ String[] valArr = param.getValue(); StringBuilder sbVal = new StringBuilder(); for (String val : valArr) { sbVal.append(val).append(","); } // clean last "," String val = sbVal.substring(0, sbVal.length()-1); paramMap.put(param.getKey(), val); }); // form case // business try catch try { Collection parts = request.getParts(); Map form = Maps.newHashMap(); parts.forEach(part -> { String paramKey = part.getName(); String paramVal = paramMap.get(paramKey); paramMap.remove(paramKey); form.put(paramKey, paramVal); }); setForm(JSON.toJSONString(form)); } catch (Exception e) { e.printStackTrace(); // no form-data } // query case setQuery(JSON.toJSONString(paramMap)); System.out.println(1); } finally { if(isr != null) { isr.close(); } } } @Override public ServletInputStream getInputStream() { try { final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(rawJson.getBytes(Charset.defaultCharset())); return new ServletInputStream() { @Override public int read() { return byteArrayInputStream.read(); } @Override public boolean isFinished() { return false; } @Override public boolean isReady() { return false; } @Override public void setReadListener(ReadListener listener) { } }; }catch (Exception e){ e.printStackTrace(); return null; } } @Override public BufferedReader getReader() { return new BufferedReader(new InputStreamReader(this.getInputStream())); }}
- 这里就分别获取到 URL、FORM、RAW-JSON 参数。
- 补充:也有专门获取 URL 参数的方法,request.getQueryString()。
转载地址:https://lux-sun.blog.csdn.net/article/details/107366460 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月21日 11时22分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于java的ssm框架就业信息管理系统的设计
2019-04-30
基于java的ssm框架的旅游网站设计与实现
2019-04-30
基于java的SSM框架的流浪猫救助网站的设计与实现
2019-04-30
基于java的SSM框架的教务关系系统的设计与实现
2019-04-30
别再问我什么是A/B测试了!
2019-04-30
如何用同期群分析模型提升留存?(Tableau实战)
2019-04-30
爱了,吹爆这个高颜值的流程图工具!
2019-04-30
一个数据项目
2019-04-30
基于JAVA_JSP电子书下载系统
2019-04-30
基于java出租车计价器设计与实现
2019-04-30
十二时辰篇:这该死的 996
2019-04-30
2021最新 上海互联网公司排名
2019-04-30
字节vs快手!取消大小周之战
2019-04-30
送一个闲置显示器!
2019-04-30
Oracle 行转列 pivot函数基本用法
2019-04-30
Oracle字符串分隔符替换(替换奇数个或偶数个)
2019-04-30
Oracle 利用 UTL_SMTP 包发送邮件
2019-04-30
Oracle 的循环中的异常捕捉和处理
2019-04-30
Oracle通过pivot和unpivot配合实现行列转换
2019-04-30