You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vert.X处理表单提交时无法获取参数值的问题排查

问题分析与解决

你的问题核心是HTML表单输入控件缺少name属性,另外可以优化Vert.x的参数获取逻辑,具体如下:

1. 修复HTML表单的核心问题

浏览器只会提交带有name属性的表单控件数据,你当前的所有<input>只有id没有name,导致服务器无法接收到任何表单参数。修正后的HTML代码如下:

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/queries" method="post">
        <input type="checkbox" id="includeOtherPMs" name="includeOtherPMs"/> include other PMs
        <input type="checkbox" id="includePreCanned" name="includePreCanned"/> include pre-canned
        <input type="search" id="keyword" name="keyword">
        <input type="submit" id="listQueries" name="listQueries" value="filter"/>
    </form>
</body>
</html>

2. 验证Vert.x的参数获取逻辑

你已经正确添加了BodyHandler.create()(这是解析POST表单数据的必要组件),现在可以在QueriesHandler里添加打印逻辑来验证参数,同时别忘了给客户端返回响应:

public class QueriesHandler implements Handler<RoutingContext> {
    @Override
    public void handle(RoutingContext routingContext) {
        // 获取请求头(正常情况下能拿到如Content-Type等信息)
        MultiMap headers = routingContext.request().headers();
        System.out.println("请求头: " + headers);

        // 获取POST表单参数(修正表单后就能拿到对应值)
        MultiMap formParams = routingContext.request().formAttributes();
        System.out.println("表单参数: " + formParams);

        // queryParams对应URL中的查询参数(如GET请求的?key=value),POST请求若URL无参数则为空
        MultiMap queryParams = routingContext.queryParams();
        System.out.println("URL查询参数: " + queryParams);

        // 必须响应客户端,避免请求挂起
        routingContext.response().end("请求处理完成");
    }
}

额外注意事项

  • 复选框(checkbox)只有在被勾选时,对应的name参数才会被提交到服务器,未勾选则不会出现在表单参数中
  • 确保BodyHandler的注册顺序在业务Handler之前,你当前的代码顺序是正确的(先注册全局BodyHandler,再注册/queries的Handler),无需调整

内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:18:27