如何在 Spring 后端获取可变 HTML 表单值 (POST)

2023-12-01

我对 Java 和 Spring 框架相当陌生,这可能很容易解决,但我找不到这个问题的任何解决方案,并且其他解决方案不适合我的问题。

我想实现一个动态表单,用户可以在其中插入多个电子邮件地址来发送邀请。这种形式可以通过JS动态扩展。每次点击都会向我的表单添加另一个输入字段。所以现在我有不同数量的值想要发送到我的 Spring 后端。我在想我必须使用 @ResponseBody 和 Map 来存储 POST 值,然后迭代它并(例如)将它们复制到 ArrayList 中或直接使用我的 EmailService 发送电子邮件。

问题是,Spring 给了我一个错误:

解决了Handler执行引起的异常: org.springframework.web.HttpMediaTypeNotSupportedException:内容 不支持类型“application/x-www-form-urlencoded;charset=UTF-8”

这是我的 HTML

<form method="post" id="send-invite-mail" th:action="@{/sendmail/sendInvitations}">
  <div id="formfields">
    <div class="form-group">
      <input type="email" class="form-control" id="email1" name="email1" placeholder="Enter Email-Address ..."/>
    </div>
  </div>
  <!-- more form-groups are added here by JS -->
  <button type="submit" id="submitInvitation" class="btn btn-primary">Invite</button>
</form>

这就是我在后端用来获取我的值的方法

@PostMapping("/sendmail/sendInvitations")
public void getInvitationList (@RequestBody Map<String, String> formData){
   List<String> adressList = new ArrayList<String>();
   for (Map.Entry<String, String> entry : formData.entrySet()) {
      adressList.add(entry.getValue());
   }
}

现在我不知道我这样做是否正确。感谢任何帮助。


HTML 表单method='post'发送数据为表单 url 编码。 所以,在这种情况下,Spring无法将其理解为RequestBody。 因为,POST 数据与@RequestBody期望内容类型为application/json。所以,如果你想真正以json形式发送数据,你必须删除@RequestBody注释。

最后,您可以指定内容类型consumes并使用 以下方式之一:

1. @RequestParam代替@RequestBody:

@RequestMapping(value = "/sendmail/sendInvitations",
        method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, 
        produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody returnType methodName(@RequestParam Map<String, String> name) {
    ...
}

2. Remove @RequestBody并使用您的 POJO 类:

@RequestMapping(value = "/sendmail/sendInvitations",
        method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, 
        produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody returnType methodName(YourPOJO pojo) {
    ...
}

我希望这可以帮助你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring 后端获取可变 HTML 表单值 (POST) 的相关文章

  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • PHP 表单 - 带验证蜜罐

    我有以下内容 效果很好 但对垃圾邮件机器人开放 我想放入蜜罐 而不是验证码 下面的代码适用于验证姓名 电子邮件 消息 但我无法让它与蜜罐一起工作 任何人都可以查看 蜜罐 代码并告诉我如何修复它吗 我希望表单给出 success2 不允许垃圾
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • HSQLDB问题:从Java代码启动HSQL数据库

    当我必须为我的应用程序运行 HSQLDB 时 我必须从命令提示符执行此操作 因此我总是双击 Server bat 批处理文件 来启动服务器 其中包含 java classpath war WEB INF lib hsqldb jar org
  • 将变量从 Scriptlet 传递到 Javascript。

    我有这个代码片段 我想要做的是在我的 JavaScript 函数 gotoa 中获取变量 temp1 的值 在这个特
  • 用于将数据从一个表复制到另一个表的存储过程

    I have 成对的桌子在格式中TABLE and TABLE TWIN now TABLE是包含大量数据的主表 TABLE TWIN是一个具有完全相同字段但数据很少 不同数据 的表 现在我想复制所有行TABLE TWIN to TABLE
  • 返回指向数组的指针的函数

    我成功地使用了可变长度数组C我现在有以下内容 include
  • 安装张量流版本0.12

    我如何在 Windows x64 CPU 上安装tensorflow 0 12 如果无处可寻 我尝试通过 pip 安装 python 3 6 没有解决 pip install user install tensorflow 0 12 还用
  • 在程序中创建表

    我创建了表 Risiko 它应该是动态的 我以为它会那么简单 但事实并非如此 我该怎么解决呢 我做错了什么 CREATE OR REPLACE PROCEDURE TABLERISIKO IS BEGIN drop table risiko
  • .htaccess 域名重定向

    我有一个服务器 有 3 个域都指向它 所有域都位于同一网站上 www domain1 com www domain2 com www domain3 com 如何使用 htaccess 将 www domain3 com 重定向到 www
  • 音频文件无法在设备上运行,但可以在模拟器上运行

    我正在 iPhone 应用程序中播放音频 但问题是它在模拟器上工作正常 但在设备上不起作用 这是我的代码 当此代码运行时 它只是关闭应用程序 NSString thePath NSBundle mainBundle pathForResou
  • 在 Matlab 中绘制正方形曲面

    如何在中绘制正方形曲面Matlab 更准确地说 我想绘制一个表面值为 0 5 的正方形 该正方形位于 X 1 到 X 1 和 Y 2 5 到 3 5 处 我尝试了以下方法 X Y meshgrid 3 5 5 3 5 Z zeros 15
  • 如何更改TOMCAT使用的Java版本?

    我的系统上安装了 Java 1 6 和 Tomcat 5 5 但是 Tomcat 5 5 访问 Java 1 5 因此结果我收到错误Bad version number in class file使用 JSP 执行 java 代码时 如何将
  • Flutter - 允许用户输入主题标签

    你好 Flutter 新手 我想让我的用户输入一些链接到该条目的主题标签 这些标签将进入 Firestore For the hashtag I set it as a List but I m not sure how to let us
  • 如何删除已打开句柄的文件?

    问题历史 现在我用Windows 媒体播放器 SDK 9在我的桌面应用程序中播放 AVI 文件 它在 Windows XP 上运行良好 但是当我尝试运行它时在 Windows 7 上我发现了一个错误 我无法在播放后立即删除 AVI 文件 问
  • django从文件导入模板[重复]

    这个问题在这里已经有答案了 我有 3 个页面 每个 html 文件的顶部都有相同的菜单 菜单中有很多标签 当我想修改标签中的所有链接时遇到问题 我想将菜单写入另一个名为 menu txt 的文件中 并使用模板加载 menu txt 然后将菜
  • 将图像从网络摄像头发布到 Azure Face Api

    我正在尝试将从网络摄像头获取的图像上传到 Microsoft Azure Face Api 我从 canvas toDataUrl image png 获取图像 其中包含数据 Uri 我将内容类型更改为 application octet
  • 用于从字符串中删除特定 BBCode 的正则表达式

    我正在尝试编写一个简单的方法来从输入字符串中删除特定的 BBCodes 例如 我有一个输入 string input b Hello World b 我希望能够做到 Remove input b 并得到输出 Hello World 正则表达
  • Numpy 似乎产生了不正确的特征向量

    我想使用 Numpy 计算特征值和特征向量 这是我的代码 import numpy as np from numpy import linalg as LA lapl np array 2 1 1 0 0 0 1 3 0 1 0 1 1 0
  • 通过 .NET 关闭时 Excel 2007 挂起

    我有一个 Visual Basic NET 程序 需要打开和关闭 Excel 电子表格 打开和阅读电子表格工作正常 但尝试关闭 Excel 2007 应用程序会导致其挂起 它似乎关闭了 但如果您查看任务管理器 应用程序仍在运行 我用来关闭它
  • 折叠所有表单项 JQuery Mobile

    使用 JQuery 移动版 1 4 0 我有一个表单 其中包含许多带有多个复选框的可扩展元素 当我单击刷新按钮时 我可以清除所有用户选择 但不同的字段集仍然存在expanded 我可以刷新页面 但我认为这不是一个顺利的选择 除了为每个字段集
  • JButton settext具体位置

    我有一个带有图像图标的 JButton 我需要定位文本 有没有办法将 JButton 的文本定位在特定位置 而不是使用 CENTER LEADING TOP 等 我以前从未在 JButton 上尝试过 但也许您可以添加 JLabel 作为按
  • 如何在 Spring 后端获取可变 HTML 表单值 (POST)

    我对 Java 和 Spring 框架相当陌生 这可能很容易解决 但我找不到这个问题的任何解决方案 并且其他解决方案不适合我的问题 我想实现一个动态表单 用户可以在其中插入多个电子邮件地址来发送邀请 这种形式可以通过JS动态扩展 每次点击都