すべてのリクエストは、コントローラーの 1 つのインスタンス (Spring Managed Bean であるためシングルトン) によって処理されます。そのため、1 つのリクエストに関連する状態を (フィールドに) 保存しないようにする必要があります。
そう:
@Controller
@RequestMapping("/foo")
public class Foo {
@Autowired
private Something something;
@RequestMapping("/list")
public String foo() {
something.someMethod();
bar();
return "view"
}
private void bar() {
// something
}
}
は問題ありませんが、次のとおりです。
@Controller
@RequestMapping("/foo")
public class Foo {
private User theUser; // problem is ALL request share this field
@RequestMapping("/foo/{userId}")
public String foo(@PathVariable final Integer userId) {
if (theUser.getId().equals(userId)) {
// something
} else {
theUser = ...
}
return "view"
}
}
ではありません。
注意:テストされていません(ここに入力しただけなので、コンパイラに害を及ぼす可能性さえあります)