【问题标题】:How to read form parameters with helidon-se如何使用 helidon-se 读取表单参数
【发布时间】:2021-10-19 07:53:43
【问题描述】:

在 helidon-se 中读取表单参数的正确方法是什么。

我尝试了以下操作但没有成功。

  1. DefaultMediaSupport.formParamReader() 添加到网络服务器:
WebServer.builder()
 .addReader(...) // added here
 .build()

然后阅读request::content

request.content()
  .as(FormParams.class)
  .thenAccept(...) // never called
  1. 直接从 Request::content:
  2. 读取
DefaultMediaSupport.formParamReader()
  .unmarshall(..., FormParams.class)
  .thenAccept(...) // never called

30s 之后客户端(浏览器/httpie)都超时并且请求未被处理。

那么,从 helidon-se 的请求正文中读取表单参数的正确方法是什么。

谢谢。

【问题讨论】:

标签: java reactive helidon form-parameter


【解决方案1】:

FormParams 的阅读器是开箱即用的,您不必显式注册它(除非您禁用了默认阅读器)。它只支持两种内容类型:

  • application/x-www-form-urlencoded
  • text/plain

你可以这样使用它:

req.content().as(FormParams.class).thenAccept(fp -> {
    fp.first("foo")
      .ifPresentOrElse((greeting) -> res.send(greeting),
              () -> res.status(400).send());
});

你可以用 curl 测试一下:

curl -X POST -d 'foo=bar' http://localhost:8080/abc

在 HTML 中,表单如下所示:

<form action="/abc" method="post" enctype="application/x-www-form-urlencoded">
    <input type="text" name="foo" />
    <input type="submit" value="Submit!" name="submit">
</form>

Helidon 也支持multipart/form-data:

将以下依赖项添加到您的pom.xml

<dependency>
    <groupId>io.helidon.media</groupId>
    <artifactId>helidon-media-multipart</artifactId>
</dependency>

WebServer 构建器中配置媒体支持:

WebServer.builder(createRouting())
         .addMediaSupport(MultiPartSupport.create())

然后像这样使用它:

req.content().as(ReadableMultiPart.class).thenAccept(multiPart -> {
    multiPart.field("foo")
             .ifPresentOrElse((part) -> res.send(part.as(String.class)),
                     () -> res.status(400).send());
});

你可以像这样用 curl 测试它:

curl -X POST -F 'foo=bar' http://localhost:8080/abc

在 HTML 中,表单如下所示:

<form action="/abc" method="post" enctype="multipart/form-data">
    <input type="text" name="foo" />
    <input type="submit" value="Submit!" name="submit">
</form>

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2016-07-07
    • 2015-12-10
    相关资源
    最近更新 更多