
環境
xml
1<parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>2.0.1.RELEASE</version> 5 <relativePath /> <!-- lookup parent from repository --> 6</parent>
以下のページを見ました
サンプルとして載っているコード
java
1@ModelAttribute("user") //②モデルの前処理 2public User newRequest(@RequestParam(required=false, value="id") String id) { 3 if(id== null) return null; 4 return this.accountService.get(id); 5}
以下が無駄だと思う理由です
(1).@ModelAttributeの呼び出し : 事前準備として、DBからPOJOを取得して、Model に登録します。
(ModelAttributeメソッドでDBからPOJOを取得し、RequestMappingメソッドを呼び出すときにSpringが自動的に画面の値で必要なPOJOフィールドを更新する)
- 調べてみたら確かに
@RequestMapping
の前に必ず@ModelAttribute
が呼ばれて初期化する事を確認しました。 - また、説明通り
@RequestMapping
で受け取るform
は画面の値で上書きされていました。
画面の値で上書きするのであれば毎回初期化するのは無駄に感じます。
※特にDBにアクセスする場合は毎回SQL発行する事になる為
また、if(id== null) return null;
に関して、初期化が必要ない場合はid
が入ってこないからnull
を返しているのかと考えましたが、'@ModelAttribute'でreturn null;
してしまうと@RequestMapping
の引数で受け取るform
がnull
になってしまうためvalidate処理や画面表示が正しく行われない為目的は違うんだろうと判断しました。
みなさん気にならずにそのまま実装しているのでしょうか、または別の方法で実装されているのでしょうか。
以下ならまだわからないでもないです
java
1@ModelAttribute("user") //②モデルの前処理 2public User newRequest( @RequestParam(required=false, value="id") String id, User form) { 3 if(id== null) return form; 4 User user = this.accountService.get(id); 5 BeanUtils.copyProperties(user, form); 6 return form; 7}


回答1件
あなたの回答
tips
プレビュー