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

niwlg2el  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(558)

我的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'不存在”。
如果我在浏览器中查看network选项卡,我可以看到请求在“formdata”标题下带有albumname的值,其中 @RequestParam 我好像找不到。
我的代码是直接从本教程中复制过来的,但我担心有些东西可能已经被弃用了——有什么想法吗?

zvokhttg

zvokhttg1#

@RequestParam 用于从url检索参数,但也可以从httppost请求检索参数,并且您的代码在我的本地服务器上运行良好。我看到的是,我被发送到一个白色标签错误页,这是你指的错误吗?在任何情况下,我都看不到任何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>

这个 @RequestBody 注解通常在post请求主体中传递信息时使用,通常采用json格式。在这种情况下,表单必须发送一个json字符串,如 {"albumName": "my amazing album"} .
更新
所以,我检查了你的存储库,但它实际上不起作用。将以下依赖项添加到 pom.xml 使我建议的代码正常工作:

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

相关问题