必需的字符串参数不存在



我的Spring Boot项目在/albums/add有一个表单,看起来像这样:

<form method="post">
<input type="text" name="albumName"/>
<input type="submit" value="Add album"/>
</form>

我正试图在下面的控制器中处理这个请求:

@Controller
@RequestMapping(value = "/albums")
public class AlbumController {
(...)
@PostMapping("/add")
public String processAddAlbumForm(@RequestParam String albumName) {
albums.add(albumName);
return "redirect:";
}
}

然而,Spring抛出了一个400,告诉我";不存在必需的字符串参数"albumName";。

如果我在浏览器中查看"网络"选项卡,我可以看到请求到达时在";表单数据";头,@RequestParam注释似乎找不到它。

我的代码是直接从本教程中复制的,但我担心有些东西可能在制作后就被弃用了——有什么想法吗?

@RequestParam用于从URL检索参数,但它也可以从HTTPPOST请求中检索参数,并且您的代码在我的本地上运行良好。我看到的是,我被发送到一个白标签错误页面,这就是你所指的错误吗?在任何情况下,我都看不到任何500被返回或日志中有任何异常。如果您添加@ResponseBody注释,您将能够在响应的正文中发送一个字符串:

@PostMapping("/add")
@ResponseBody
public String processAddAlbumForm(@RequestParam String albumName) {
albums.add(albumName);
return "redirect:";
}

如果你想避免在每个方法中使用@ResponseBody,你可以使用@RestController而不是默认情况下假设为@ResponseBody@Controller

我用来测试端点的html如下,复制了你的html,并添加了action属性来指定我的应用程序的端点:

<form action="http://localhost:8080/albums/add" method="post">
<input type="text" name="albumName"/>
<input type="submit" value="Add album"/>
</form>

@RequestBody注释通常用于在post请求的正文中传递信息,通常为json格式。在这种情况下,您的表单将不得不发送一个类似{"albumName": "my amazing album"}的json字符串。

更新

所以,我已经检查了您的存储库,但它实际上不起作用。在pom.xml中添加以下依赖项可以使我建议的代码正常工作:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

最新更新