spring进程POST数据 - 注释正确的控制器

时间:2013-03-06 22:49:58

标签: java forms spring request

我在配置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 viewcontroller(该类是多控制器,因为我不想为每个操作创建单独的文件)和servlet configuration

不知道它是否重要,但我正在使用切片作为视图层(并且tiles.xml中使用了逻辑视图名称。)

此外,我还不完全了解弹簧路由的工作原理。到目前为止,我在servlet xml中定义了一个映射,但不知道它是否是一个好的方法......

3 个答案:

答案 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">