【问题标题】:How to get data from form with spark java?如何使用 spark java 从表单中获取数据?
【发布时间】:2015-06-01 10:50:53
【问题描述】:

我对所有这些东西都很陌生,但希望你们能帮助我了解它是如何工作的。 我得到了一个带有 field 的表格。我如何从客户端获取数据?正在寻找一些信息,但找不到。

<form action="Dispatcher" method="post">
    <fieldset>
        <p>Name</p>
        <input type="text" name="userName" required="true">

        <p>Email</p>
        <input type="text" name="userEmail" required="true">
        <input type="submit" value="submit">
    </fieldset>
</form>

【问题讨论】:

  • 任何答案对你有用吗?

标签: java post spark-java


【解决方案1】:

我遇到了同样的问题。我用queryParams解决了:

request.queryParams("userName")

【讨论】:

  • 注意你必须确保request.body() 没有被事先调用(例如用于记录目的),否则它会消耗正文,表单参数将不会被解析。 javadoc 在这方面相当缺乏。
  • 这很奇怪。我期待 request.params("userName") 返回值,但 request.queryParams("userName") 给出相同的值。我认为 queryParams 应该返回查询字符串。这是java spark的正常行为吗?
  • @Raf 这是 java spark 的正常行为吗? 你说吧:这是 java spark 的一个奇怪行为。
  • @Stephan 谢谢,你的回答救了我。我想测试微服务,我所做的与大多​​数在线测试示例不同,请您看看这个问题stackoverflow.com/questions/37715875/…,我们将不胜感激。
  • queryParams 代表底层 HTTP 基础设施的Request::getParameter(请参阅github.com/perwendel/spark/blob/master/src/main/java/spark/…)。该方法文档解释了“将请求参数的值作为字符串返回,如果参数不存在,则返回 null。请求参数是随请求发送的额外信息。对于 HTTP servlet,参数包含在查询字符串或发布的表单数据中。” docs.oracle.com/javaee/7/api/javax/servlet/…
【解决方案2】:

为了记录,我遇到了类似的问题,这就是我解决它的方法。

由于它是一个多部分请求,因此您必须指定

MultipartConfigElement multipartConfigElement = new MultipartConfigElement(path);

req.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement);

您可以在这里找到详细信息SparkJava: Upload file did't work in Spark java framework

一旦正确完成,您应该可以access the data using query params,如 Stephan 所述。

【讨论】:

    【解决方案3】:

    我认为您需要使用request.params("userName"),它将为您提供名称为userName的参数列表

    【讨论】:

    • 奇怪的命名约定。应该让它更明显:getPostParam
    【解决方案4】:

    正如Java doc 所说,

    如果参数数据是在请求正文中发送的,例如发生在 HTTP POST 请求中,那么直接通过 getInputStream() 或 getReader() 读取正文可能会干扰该方法的执行。

    所以request.queryParams("userName") 在调用request.body() 后将不起作用(例如用于记录)。我写了一个实用函数来获取参数。

    public static String getParameter(String body, String param) {
        HashMap<String, String> params = new HashMap();
        for (String s : body.split("&")) {
            String[] kv = s.split("=");
            params.put(kv[0], kv[1]);
        }
        String encoded = params.get(param);
        return URLDecoder.decode(encoded, StandardCharsets.UTF_8);
    }
    

    【讨论】:

      【解决方案5】:

      我认为你最好使用 AngularJS 或 JQuery 之类的 js 框架将表单数据转换为 json,然后再发送到服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 2019-03-14
        • 2020-09-18
        • 1970-01-01
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多