所需的字符串参数不存在?
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>
我的 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>