所需的字符串参数不存在?

Required String Parameter is not present?

我的 Spring 引导项目在 /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'”。

如果我在浏览器中查看“网络”选项卡,我可以在“表单数据”header 下看到带有 albumName 值的请求,其中 @RequestParam 注释似乎不存在找到它。

我的代码是直接从 this tutorial 复制的,但我担心有些东西自创建以来可能已被弃用 - 有什么想法吗?

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

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

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

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

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

当您在 post 请求的正文中传递信息时,通常使用 @RequestBody 注释,通常采用 json 格式。在这种情况下,您的表单将必须发送一个 json 字符串,例如 {"albumName": "my amazing album"}.

更新

所以,我检查了您的存储库,但它实际上无法正常工作。将以下依赖项添加到您的 pom.xml 使我建议的代码工作得很好:

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