我的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
我好像找不到。
我的代码是直接从本教程中复制过来的,但我担心有些东西可能已经被弃用了——有什么想法吗?
1条答案
按热度按时间zvokhttg1#
@RequestParam
用于从url检索参数,但也可以从httppost请求检索参数,并且您的代码在我的本地服务器上运行良好。我看到的是,我被发送到一个白色标签错误页,这是你指的错误吗?在任何情况下,我都看不到任何500被返回或任何异常的日志。如果你加上@ResponseBody
注解您将能够在响应正文中发送字符串:如果你想避免使用
@ResponseBody
你可以用的每种方法@RestController
而不是@Controller
我们将假设@ResponseBody
默认情况下。我用来测试端点的html如下,复制了你的html片段并添加了
action
属性指定应用程序的终结点:这个
@RequestBody
注解通常在post请求主体中传递信息时使用,通常采用json格式。在这种情况下,表单必须发送一个json字符串,如{"albumName": "my amazing album"}
.更新
所以,我检查了你的存储库,但它实际上不起作用。将以下依赖项添加到
pom.xml
使我建议的代码正常工作: