我在配置spring MVC以在右侧控制器中处理表单POST数据时遇到问题。我有一个add
动作,它将向数据库中添加一条新记录。
表单提交后,我收到404错误(http://localhost:8084/lyricsBase/song/submit.html
),所以我猜我在路由表单提交时出错了。
这是我的控制器代码:
public class SongController extends MultiActionController {
[...]
@RequestMapping(value = "/song/submit.html", method = RequestMethod.POST)
public ModelAndView submit(@RequestParam("song") Song song) throws Exception {
HashMap model = new HashMap();
model.put("song", song);
// or do something better here...
return new ModelAndView("t.edit", model);
}
这是视图表单标记:
<form:form method="POST" commandName="song" action="submit.html">
我的申请代码可在github上找到。以下是重要文件:the form view,controller(该类是多控制器,因为我不想为每个操作创建单独的文件)和servlet configuration。
不知道它是否重要,但我正在使用切片作为视图层(并且tiles.xml中使用了逻辑视图名称。)
此外,我还不完全了解弹簧路由的工作原理。到目前为止,我在servlet xml中定义了一个映射,但不知道它是否是一个好的方法......
答案 0 :(得分:1)
歌曲的发布价值是多少?我不确定Spring是否将发布的数据转录或反序列化为对象/实体。 你可以尝试改变;
@RequestMapping(value = "/song/submit.html", method = RequestMethod.POST)
public ModelAndView submit(@RequestParam("song") Song song) throws Exception {
到
@RequestMapping(value = "/song/submit.html", method = RequestMethod.POST)
public ModelAndView submit(@RequestParam("song") String song) throws Exception {
看看那些是否有所回升。
另一种方法是从请求对象中读取参数;
@RequestMapping(value = "/song/submit.html", method = RequestMethod.POST)
public ModelAndView submit(HttpServletRequest request) throws Exception {
Object song = request.getParameter("song");
Gl!
答案 1 :(得分:0)
尝试此操作,将@RequestParam("song")
更改为@RequestBody
答案 2 :(得分:0)
如果您的应用程序网址是:
http://localhost:8084/lyricsBase/song/submit.html
请求映射应该像(在映射中删除第一个'/'):
@RequestMapping(value = "song/submit.html", method = RequestMethod.POST)
public ModelAndView submit(@ModelAttribute("song") Song song) throws Exception {
}
jsp中的form标签应为:
<form:form method="POST" commandName="song" action="song/submit.html">