【问题标题】:App engine application/json payload reading in java appengine在 java appengine 中读取应用引擎应用程序/json 有效负载
【发布时间】:2015-02-14 22:38:35
【问题描述】:

如何读取作为 POST 到 GAE java 应用程序的有效负载的字符串/字节数组?

有没有一种简单的方法可以在不使用 Jackson / jersey 或类似库的情况下获取这些字节?

Angular 端使用类似的东西:

 $http({
        method : 'POST',
        url : 'http://APPID.appspot.com/api/get-reference-locales-for',
        data : {
            'param' : value,
            'param2' : value2
        })

Java端有

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException { ...

我希望有一种简单的方法可以从 req 对象中获取字符串 {'param':1,'param':2},但我似乎可以找到它。

【问题讨论】:

  • 它不是以 JSON 格式发布的吗?它以 HTML 表单的形式发布 - 你知道,作为查询参数。
  • 我认为它在请求正文/有效负载中作为 JSON 发送。知道如何从那里阅读吗?
  • 您应该考虑使用更高级别的抽象、MVC 或类似的东西,如 spring、struts、thundr 等。如果您希望自己直接执行此操作,则需要将 req.getInputStream() 使用到字节数组,然后使用正确的字符编码将其转换为字符串,该字符串将在请求标头中。
  • 如果是 JSON 那么我不知道你为什么不使用 Jackson 来解析请求正文。这就是它的用途。如果您不想要依赖项,请改用 javax.json。
  • 只是为了说明即使发送的 JSON 格式不正确,我也希望能够控制输出 - 或者甚至能够测试发送的内容是否是 JSON。因此,如果数据不完全是 JSON,则自动响应错误的库不适合我。

标签: java google-app-engine post


【解决方案1】:

根据这里的答案: Getting request payload from POST request in Java servlet

我现在正在使用:

public String getRequestPayload(HttpServletRequest req) {
    StringBuilder buffer = new StringBuilder();
    BufferedReader reader;
    String data = "";
    try {
        reader = req.getReader();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        data = buffer.toString();   
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return data;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2022-09-27
    • 2013-01-25
    • 2020-01-05
    • 2023-02-10
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多