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

  • 相关阅读:
    Go
    go-反射
    go-map
    go中数组与切片
    goroutine 和 channel
    Go中的闭包
    新版 C# 高效率编程指南
    gitignore 规则和不起作用的解决方案
    Linux系统部署.Net Core3.1项目
    List<对象> 根据某个字段提出一个 List<String>,并且去重
  • 原文地址:https://www.cnblogs.com/youlixishi/p/5635407.html
Copyright © 2011-2022 走看看