1. ホーム
  2. スプリング

[解決済み】Springでは、オプションのパス変数を作ることができますか?

2022-04-13 05:36:32

質問

Spring 3.0では、オプションのパス変数を持つことができますか?

例えば

@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
        HttpServletRequest req,
        @PathVariable String type,
        @RequestParam("track") String track) {
    return new TestBean();
}

ここでは、次のようにします。 /json/abc または /json を使って同じメソッドを呼び出すことができます。

明らかな回避策としては、以下のように宣言します。 type をリクエストパラメータとして使用します。

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
        HttpServletRequest req,
        @RequestParam(value = "type", required = false) String type,
        @RequestParam("track") String track) {
    return new TestBean();
}

で、次に /json?type=abc&track=aa または /json?track=rr が動作します。

解決方法は?

オプションのパス変数を持つことはできませんが、同じサービスコードを呼び出す2つのコントローラメソッドを持つことは可能です。

@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean typedTestBean(
        HttpServletRequest req,
        @PathVariable String type,
        @RequestParam("track") String track) {
    return getTestBean(type);
}

@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testBean(
        HttpServletRequest req,
        @RequestParam("track") String track) {
    return getTestBean();
}