request.getReader()和request.getParameter("key") 方法只能读取一次,重复读取会报IO异常

第一种

从  ContainerRequestContext   对象 获取请求头、路径、参数


//请求头
MultivaluedMap<String, String> headers = containerRequestContext.getHeaders();
//路径参数
MultivaluedMap<String, String> pathParam = containerRequestContext.getUriInfo().getPathParameters();
//queryParam
MultivaluedMap<String, String> queryParam = containerRequestContext.getUriInfo().getQueryParameters();
// 路径
String path = containerRequestContext.getUriInfo().getPath(true).toLowerCase();

注意:这里MultivaluedMap和map不同,遍历的时候也不同,MultivaluedMap 一个key 可以有多个值 , map一个key 只对应一个值

举个例子:

// MultiValueMap 一个 key 可以对应多个 value
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("name", "小明");
map.add("name", "小红");
System.out.println(map.toString());
// Map 一个 key 对应一个 value
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("name", "小明");
hashMap.put("name", "小红");
System.out.println(hashMap.toString());--------------output---------------
{name=[小明, 小红]}
{name=小红}

第二种

从 HttpServletRequest  获取

// 获取所有header
Map<String, String> headerMap = new HashMap<>();
Enumeration enumeration = httpServletRequest.getHeaderNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
String value = httpServletRequest.getHeader(name);
headerMap.put(name, value);
}
// 获取所有参数
Map<String, String> parameterMap = new HashMap<>();
Enumeration enumeration = httpServletRequest.getParameterNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
String value = httpServletRequest.getParameter(name);
parameterMap.put(name, value);
}
// 获取boby
InputStream inputStream = null;
try {inputStream = httpServletRequest.getInputStream();StringBuilder babyStr = new StringBuilder();byte[] b = new byte[4096];for (int n; (n = inputStream.read(b)) != -1; ) {babyStr.append(new String(b, 0, n));}System.out.println(babyStr);
} catch (IOException e) {e.printStackTrace();
} finally {if (null != inputStream) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}
}
 // 二进制读取 获取boby
int len = httpServletRequest.getContentLength();
byte[] buffer = new byte[len];
ServletInputStream in = null;
try {in = httpServletRequest.getInputStream();in.read(buffer, 0, len);in.close();
} catch (IOException e) {e.printStackTrace();
} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}
}

注意:HttpServletRequest 请求中的 body 内容仅能调用 request.getInputStream(), request.getReader()和request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常

获取路径:

request.getServletPath()
request.getPathInfo()
request.getContextPath()
request.getRequestURI()
request.getRequestURL()
request.getServletContext().getRealPath()
  • getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括。
  • getPageInfo():与getServletPath()获取的路径互补,能够得到的是“url-pattern”中 模糊匹配(不确定) 的路径部分
  • getContextPath():获取项目的根路径
  • getRequestURI():获取根路径到地址结尾
  • getRequestURL():获取请求的地址链接(浏览器中输入的地址)
  • getServletContext().getRealPath(“/”):获取“/”在机器中的实际地址
  • getScheme():获取的是使用的协议(http 或https)
  • getProtocol():获取的是协议的名称(HTTP/1.11)
  • getServerName():获取的是域名(xxx.com)
  • getLocalName():获取到的是IP

Java获取请求头、参数、路径、相关推荐

  1. JAVA获取请求头header中的参数

    //获得当前HttpServletRequest对象protected HttpServletRequest getRequest(){return ((ServletRequestAttribute ...

  2. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段...

    原文地址:ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段 ServletRequest 基本概念 ...

  3. springcloud- FeginClient 调用统一拦截添加请求头 RequestInterceptor ,被调用服务获取请求头...

    使用场景: 在springcloud中通过Fegin调用远端RestApi的时候,经常需要传递一些参数信息到被调用服务中去,比如从A服务调用B服务的时候, 需要将当前用户信息传递到B调用的服务中去,我 ...

  4. Request_获取请求头数据

    获取请求头数据             * 方法:                 * (*)String getHeader(String name):通过请求头的名称获取请求头的值        ...

  5. Servlet中获取请求头的数据

    package priv.lwx.javaex.servlet_demo.web.servlet.request;/*** 获取请求头的数据** @author liaowenxiong* @date ...

  6. java获取请求的url地址

    1.获取全路径 request.getRequestURL(); //得到http://localhost:8888/CRM/loginController/login 2.获取协议名和域名 requ ...

  7. java http请求头_http的请求头含义及如何用java发送

    大家好,我是IT修真院北京分院第二十四期的学员白笑然,一枚正直纯洁善良的JAVA程序员 今天给大家分享一下,修真院官网java任务2的一些相关知识. 1.背景介绍 HTTP Header HTTP报文 ...

  8. swagger ui 怎么输入对象_java swagger ui 添加header请求头参数的方法

    我用到的swagger 主要有三款产品,swagger editor,swagger ui 和swagger codegen. swagger editor:主要是一个本地客户端,用来自己添加api, ...

  9. java获取请求ip的方法

    在上篇文章中我们介绍了 java获取请求 ip的方法,那么这篇文章我们就来详细讲解下获取请求 ip的方法.获取请求 ip的方法是基于 HTTP协议的,其原理如下: 1.用 web应用程序,将 web服 ...

最新文章

  1. 把ePO4.5或者4.6从32位迁移到64位系统
  2. 一款神仙接私活儿软件,吊到不行!
  3. linear model课程笔记
  4. ST:看物联网老兵的平台化战略雄心
  5. CloudCare容器技术白皮书
  6. shell sqlplus执行sql文_如何通过 Shell 监控异常等待事件和活跃会话
  7. 例子:好友列表选中效果
  8. vue 怎么清空依赖_vuejs如何在把对象所有属性清空?
  9. (转)淘淘商城系列——商品搜索功能Dao实现
  10. switch语句的ns图怎么画_switch语句流程图 c语言中swtich怎么画流程图
  11. AWE /3GB 内存扩展技术
  12. 如何追踪App安装来源
  13. maven-replacer-plugin的使用
  14. 怎么恢复计算机文件查看方式,win7电脑打开方式怎么还原?win7电脑还原打开方式的方法...
  15. Stanford-corenlp 英文词性标注
  16. 电容在微分、积分电路中的本质以及应用
  17. DoIP协议从入门到精通系列——DoIP协议时间参数
  18. VS Code 自动保存设置及不成功原因
  19. 快消行业私域流量运营
  20. 计算机d导论,计算机导论 第3章(D).ppt

热门文章

  1. Java通过Fastjson实现JSONObject对象、Json字符串以及Java实体类之间互相转换
  2. 使用Docker快速搭建Hfish蜜罐
  3. java计算机毕业设计火车订票管理系统源码+mysql数据库+系统+lw文档+部署
  4. 小米 mini 路由器刷 openwrt
  5. vxworks pci驱动
  6. Idea+JUnit+JUnitGenerator,生成自动测试类(可测试controller)
  7. 原创的模拟人生2(the sims2)全11个资料片的免安装恢复注册表~!
  8. 火狐浏览器3.0下载
  9. 计算机管理 存储空间不足,电脑提示内存不足怎么办
  10. 基于Docker环境的YOLCAT语意分割模型实验环境搭建