如何使用helidon-se读取表单参数



如何正确读取helidon-se中的表单参数

我试着做了以下的事情,但是没有成功。

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

然后用

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

这两种情况下,客户端(浏览器/http)在30s之后超时,请求不被处理。

那么,在helidon-se中从请求体中读取表单参数的正确方法是什么呢?

谢谢。

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>

相关内容

  • 没有找到相关文章

最新更新