java - 如何在 Spring 后端获取可变的 HTML 表单值(POST)
问题描述
我对 Java 和 Spring 框架还很陌生,这可能很容易解决,但我找不到任何解决这个问题的方法,其他解决方案也不适合我的问题。
我想实现一个动态表单,用户在其中插入多个电子邮件地址来发送邀请。这种形式可以通过JS动态扩展。每次单击都会在我的表单中添加另一个输入字段。所以现在我有可变数量的值要发送到我的 Spring 后端。我在想我必须使用 @ResponseBody 和 Map 将 POST 值存储在其中,然后对其进行迭代并(例如)将它们复制到 ArrayList 或直接使用我的 EmailService 发送电子邮件。
问题是,Spring给了我一个错误:
处理程序执行导致的已解决异常:org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
这是我的 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());
}
}
现在我不知道我这样做是否正确。感谢任何帮助。
解决方案
以form-url-encodedmethod='post'
形式发送数据的HTML 表单。所以,在这种情况下,Spring 无法将其理解为 RequestBody。因为, POST 数据期望内容类型为. 因此,如果您想真正以 json 格式发送数据,则必须删除 @RequestBody 注释。@RequestBody
application/json
最后,您可以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.删除@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) {
...
}
我希望这可以帮助你。
推荐阅读
- r - 如何将函数应用于 tidyverse 中的 colnames
- java - 如何在java程序中设置JVM参数值
- java - 使用数组的文本到图像
- vue-component - 将放大/缩小移动到左上角以外的其他位置
- java - 如何以编程方式在 Java 中获取 Kafka 集群和代理信息?
- javascript - 数据库事务并行发生而不是循环顺序发生
- ruby-on-rails - 如何在 Rails 控制器本身中返回压缩的 json 数据?
- sql - 运行最新日期记录
- javascript - 在 javascript 中正确组织类
- solr - Solr同义词图过滤器在其他过滤器之后不起作用