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、サーバーから正しい応答がありました

映画の URL : testMovie

しかし、私はこのような小さなフォームをページに入れたい(.jsp):

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

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

クリックして送信すると、このようなURLが表示されました

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

サーバーは{testMovie}で動作していません:(

私が得た:

映画URL:ラポート

手伝って頂けますか?

4

1 に答える 1

2

「url」をパラメーターとして渡したい場合は、次のようにする必要があります。

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

「url=」を「/{url}」マッピングに渡す必要があると誤って想定していると思います。@RequestParamORの代わりに使用するだけで、@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 に答える