0

我有这样的简单控制器:

@Controller
@RequestMapping("/raport")
public class SiteController {

    @RequestMapping(value = "/{url}", method = RequestMethod.GET)
    public String getMovie(@PathVariable String url, ModelMap model) {

        model.addAttribute("url", url);
        return "raport";

    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getDefaultMovie(ModelMap model) {

        model.addAttribute("url", "this is default movie url");
        return "raport";

    }

} 

如果我打电话,http://localhost:8090/movieraport/raport/testMovie我会从服务器得到正确的响应

电影网址:testMovie

但我想在这样的页面上有一个小表单(.jsp):

<body>
<form action="raport/" method="get">
    <input name="url" />
    <input type="submit" value="Update Record">
</form>

<h3>Movie url : ${url}</h3>

当我点击提交时,我得到了这样的网址

http://localhost:8090/movieraport/raport/raport?url=testMovie

并且服务器无法使用 {testMovie} :(

我有:

电影网址:报告

你能帮助我吗?

4

1 回答 1

2

如果要将“url”作为参数传递,则需要这样做:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getMovie(@RequestParam String url, ...) {
    ...
}

您错误地假设“url =”应该传递给您的“/{url}”映射,我想。如果您需要,只需使用@RequestParam而不是@PathVariable或创建另一种方法来支持两者。

编辑

在您发表评论后,我应该强调我无法知道您的用例是什么或您可能需要的所有端点,但是从您给出的例外来看,听起来您所做的只是getMovie()用我的替换您的getMovie(),现在签名与您的getDefaultMovie(). 您可以轻松更改签名,如下所示:

@RequestMapping(value = "/", params = "url", method = RequestMethod.GET)
public String getMovie(@RequestParam String url, ...) {
    ...
}

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getDefaultMovie(...) {
    ...
}

如您所见,我已添加params = "url"getMovie()签名中。这将确保getMovie()用于处理任何包含url参数的请求。剩下的会去getDefaultMovie()

于 2013-10-29T20:34:39.380 回答