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

  • 相关阅读:
    关系数据理论之第三范式
    关系数据理论之第二范式
    关系数据理论之第一范式
    排序之外部排序
    排序之选择排序
    排序之希尔排序
    排序之基数排序
    排序之计数排序
    排序之堆排序
    排序之归并排序
  • 原文地址:https://www.cnblogs.com/youlixishi/p/5635407.html
Copyright © 2011-2022 走看看