我正在处理遗留代码,需要打补丁。
问题:古老的应用程序发送了错误的HTTP
POST请求。参数之一不是URL编码。我知道这个参数总是排在最后,我知道它的名字。我现在正试图在运行在Tomcat中的服务器端修复它。
由于参数格式错误,因此无法通过HttpServletRequest的标准getParameter方法访问此参数。方法仅返回null。但是当我通过ServletInputStream手动读取整个请求时,所有其他参数都消失了。看起来基础类无法解析ServletInputStream的内容,因为它耗尽了。
到目前为止,我设法制作了一个包装,该包装从主体读取所有参数并覆盖了所有参数访问方法。但是,如果在我之前的链中的任何过滤器将尝试访问任何参数,则所有内容都会中断,因为ServletInputStream为空。
我可以以某种方式回避这个问题吗?可能有其他方法吗?
总而言之,如果我将在过滤器中读取原始请求正文,则参数将从请求中消失。如果读取单个参数,则ServletInputStream将为空,并且无法进行手动处理。此外,不可能通过getParameter方法读取格式错误的参数。
我发现的解决方案:
仅重新定义参数访问方法是不够的。必须完成几件事。
这4个组合将使您可以使用 getParameter 而不干扰 getInputStream 和 getReader 方法。
请注意,手动请求参数解析可能会因多部分请求而变得复杂。但这是另一个话题。
为了澄清起见,我重新定义了参数访问方法,因为我的请求已如问题中所述损坏。您可能不需要。
我想在请求正文到达Http Servlet并获得processed.The请求正文的JSON有效负载如下所示,我想摆脱“PayamtChqmanViewObject”(详细信息)部分。 我可以使用以下方法获得请求正文,但我不知道如何删除JSON的详细部分并将处理后的请求正文传递给HTTP Servlet。 非常感谢您的帮助!
我有一个通过数组工作的代码,实际上我希望传入ArrayList。 下面是示例: 这是我现在的改编... 我不明白我的错误??我不知道正确的语法... 有关信息,这里的代码 大体上 非常感谢你的帮助。
说明 支付宝境外到店支付-修改商户二维码 官方文档:https://global.alipay.com/service/merchant_QR_Code/34 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\InStore\ModifyMerchantQR\Request 属性 名称 类型 说明 $service string 接口名称 $qrcod
请求地址 https://api.es.xiaojukeji.com/river/Approval/update 返回数据格式 JSON 请求类型 POST 请求参数 参数名称 数据类型 必选 说明 client_id string yes 申请应用时分配的AppKey access_token string yes 授权后的access token timestamp string yes 当前
请求地址 https://api.es.xiaojukeji.com/river/Member/edit 返回数据格式 JSON 请求方式 POST 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes 授权后的access t
请求地址 https://api.es.xiaojukeji.com/river/BudgetCenter/edit 返回数据格式 JSON 请求方式 POST 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes 授权后的ac