我正在开发一个HttpServlet
来处理来自应用程序的POST请求,该请求包含查询字符串上的参数和正文中的JSON对象。它不是表单帖子,整个主体是JSON对象。我知道我需要使用HttpServletRequest.getReader()
来阅读正文。但我还需要使用HttpServletRequest.getParameter()
来获取查询参数。我明白两者都不能使用。
我认为目标解决方案是创建HttpServletRequestWrapper
并覆盖getReader()
,以便允许多次调用它。但我无法弄清楚如何做到这一点。或者这可能不是预期的方法。我能找到的HttpServletRequestWrapper
的所有示例似乎都与创建过滤器和修改请求内容有关。
非常感谢任何帮助。
BTW,这是托管在Google App Engine上的,但我认为这不会影响解决方案。答案 0 :(得分:1)
我认为您可以在getReader()
中实现多次调用HttpServletRequestWrapper
:
HttpServletRequestWrapper.getReader()
时,打开临时文件。实施(1)和(3),ServletFilter
可能有用。
答案 1 :(得分:1)
我建议直接通过解析查询字符串来读取查询字符串参数。这样您就不会触及邮件正文,可以使用HttpServletRequest.getReader()
。
解析查询字符串很棘手但是可以使用Apache Http Client包中的URLEncodedUtils安全地完成它,如下所述: