読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Spring MVC @PathVariableを使ってURLに含まれる動的なパラメータを取得

Spring
<スポンサーリンク>

1.やりたいこと

URLにユーザーIDとかを含めて、その値を受け取りたい。
たとえば、

http://localhost:8080/samples/user/hoge

としたときは、最後の「hoge」を取得。

http://localhost:8080/samples/user/fuga

としたときは、最後の「fuga」を取得するみたいに。

で、そういうパラメータを動的に取得するときは、@PathVariableアノテーションを使う。

下準備の方は、このブログの「Spring」カテゴリの他の記事を参考にしてほしい。

2.コントローラ

メソッドの直前に、@RequestMappingで、URLとの紐付けを行う。たとえば、以下のように。

@RequestMapping(value = "/hello/{userName}/{greeting}", method = RequestMethod.GET)

で、メソッドの引数のところに、

public String printWelcome(@PathVariable("userName") String userName,
						   @PathVariable("greeting") String greeting,
						   ModelMap model) {

のように、@RequestMappingと対応するパラメータを@PathVariableの引数に渡す。
これが@RequestMappingと合ってないと、HTTPの400番のエラーが出てしまう。

全体としては、こんな感じ。

package samples.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class SampleController {
	
	@RequestMapping(value = "/hello/{userName}/{greeting}", method = RequestMethod.GET)
	public String printWelcome(@PathVariable("userName") String userName,
							   @PathVariable("greeting") String greeting,
							   ModelMap model) {
		
		model.addAttribute("userName", userName);
		model.addAttribute("greeting", greeting);
		return "greet";
	}
	
	@RequestMapping(value="user/{userId}", method = RequestMethod.GET)
	public String printUserId(@PathVariable("userId") int userId, ModelMap model) {
		
		System.out.println("User ID:" + userId);
		model.addAttribute("userId", userId);
		return "hello";
	}
}

3.jsp

greet.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>sample</title>
</head>
<body>
	<h4>${greeting}, ${userName}</h4>
</body>
</html>

hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>sample</title>
</head>
<body>
	<h2>UserID→ ${userId}</h2>
</body>
</html>

4.デモ

http://localhost:8080/samples/user/fuga

f:id:sho322:20140301080442j:plain

f:id:sho322:20140301080449j:plain

http://localhost:8080/samples/hello/takuya/good%20morning

f:id:sho322:20140301080547j:plain


SpringによるWebアプリケーションスーパーサンプル 第2版

SpringによるWebアプリケーションスーパーサンプル 第2版