gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:25:33 25 4
gpt4 key购买 nike

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

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

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

Resolved exception caused by Handler execution: 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());
}
}

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

最佳答案

使用 method='post' 的 HTML 表单以 form-url-encoded 形式发送数据。所以,在这种情况下,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) {
...
}

希望这对您有帮助。

关于java - 如何在 Spring 后端获取可变 HTML 表单值 (POST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57747934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com