Spring Controllerの@PathVariableと@RequestParamの使い分け


前回の記事で、POST処理をさばくためによく使う@RequestBodyと@ModelAttributeについて書きました。

今回はGETリクエストをさばくのに使う@PathVariableと@RequestParamの使い分けについて説明します。

@PathVariable

/api/get/1
のように、REST形式のURIからパラメータを取るのに利用します。


	@RequestMapping("/getMsg/{userId}")
	public List<MessageDto> getMessages(@PathVariable("userId") String userId) {
		return messageService.getMessage(userId);
	}

@RequestMappingアノテーションで指定するurlのうち、{val}で指定したものを@PathVariable(“val”)で取得します。

@RequestParam

?someId=1
のように、文字通りリクエストパラメータを取るのに利用します。


	@RequestMapping("/getMsg/info")
	public List<MessageDto> getMessages(@RequestParam("userId") String userId) {
		return messageService.getMessage(userId);
	}

/path/getMsg/info?userId=hoge
などというurlに対して、@RequestParamでパラメータを取得できます。

どちらを使うか(REST形式にするかリクエストパラメータ形式にするか)はお好みですが、どちらか一方に寄せるのがオススメです。
両方あると、「このGETはRESTなのかリクエストパラメータなのかどっちだろう?」って感じで使う側が混乱しちゃいますしね。