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

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

我的spring boot项目在 /albums/add 看起来是这样的:

  1. <form method="post">
  2. <input type="text" name="albumName"/>
  3. <input type="submit" value="Add album"/>
  4. </form>

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

  1. @Controller
  2. @RequestMapping(value = "/albums")
  3. public class AlbumController {
  4. (...)
  5. @PostMapping("/add")
  6. public String processAddAlbumForm(@RequestParam String albumName) {
  7. albums.add(albumName);
  8. return "redirect:";
  9. }
  10. }

但是,spring抛出一个400并告诉我“必需的字符串参数'albumname'不存在”。
如果我在浏览器中查看network选项卡,我可以看到请求在“formdata”标题下带有albumname的值,其中 @RequestParam 我好像找不到。
我的代码是直接从本教程中复制过来的,但我担心有些东西可能已经被弃用了——有什么想法吗?

zvokhttg

zvokhttg1#

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

  1. @PostMapping("/add")
  2. @ResponseBody
  3. public String processAddAlbumForm(@RequestParam String albumName) {
  4. albums.add(albumName);
  5. return "redirect:";
  6. }

如果你想避免使用 @ResponseBody 你可以用的每种方法 @RestController 而不是 @Controller 我们将假设 @ResponseBody 默认情况下。
我用来测试端点的html如下,复制了你的html片段并添加了 action 属性指定应用程序的终结点:

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

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
展开查看全部

相关问题