zoukankan      html  css  js  c++  java
  • springbootboot-HttpServletRequest.getInputStream() 获取post内容

    问题描述:

    在php端用curl post一段json到java springboot。在java端用request.getInputStream()获取到的数据为空。

    问题确认:

    询问度娘后, 她告诉我:

    根据Servlet规范,如果同时满足下列条件,则请求体(Entity)中的表单数据,将被填充到request的parameter集合中(request.getParameter系列方法可以读取相关数据):
    1 这是一个HTTP/HTTPS请求
    2 请求方法是POST(querystring无论是否POST都将被设置到parameter中)
    3 请求的类型(Content-Type头)是application/x-www-form-urlencoded
    4 Servlet调用了getParameter系列方法

    from:http://bbs.csdn.net/topics/390833946

    抓包发现,php发送的post请求符合 以上规范。 好吧, 就是因为这样, 导致request.getInputStream()获取不到数据,因为getInputStream()流中的数据被读被框架放到 request 的paramter相关变量中去了, 并且一旦放置成功,getInputStream()流中的数据将被清空。(猜测: 其实是流读取到最后, 没有被重置。吐槽spring/java: .net中至少流是可以设置读取 指针指向0, 则可以重新读取流了好吧。)

    解决办法:

    在读取post参数时, 如果getInputStream()读取为空,则从getParameterMap()中读取。(再次吐槽: 参数居然是key, 不是value???)

    思考:

    我真的好想你, .net

  • 相关阅读:
    小毛病,大问题
    [zz]Libvirt 虚拟化库剖析
    libvirt XML 学习笔记
    Ubuntu 10.04下使用 libvirt 创建KVM虚拟机
    [zz]使用libvirt管理kvm虚拟机(更新中)
    [zz]LXC:Linux 容器工具
    一些比较好的URL
    [zz]Libvirt XML学习笔记
    [zz]一些KVM xml 例子
    [zz]kvm环境使用libvirt创建虚拟机
  • 原文地址:https://www.cnblogs.com/youlixishi/p/5635407.html
Copyright © 2011-2022 走看看