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



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

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

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

解决了由处理程序执行导致的异常: org.springframework.web.HttpMediaTypeNotSupportedException: Content 键入"应用程序/x-www-form-urlencoded;不支持字符集=UTF-8'

这是我的网页

<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());
}
}

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

具有method='post'的HTML表单将数据作为表单URL编码发送。 因此,在这种情况下,Spring 无法将其理解为 RequestBody。 因为,带有@RequestBody的 POST 数据期望内容类型为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.删除@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) {
...
}

我希望这对你有所帮助。

最新更新