Spring BootのForm周りでつまずいたところのメモ
時々intelliJショートカットやGradleのメモ
メモ
- Gradle / 拡張プロパティ
-
ext { springBootVersion = '4.0.0.BUILD-SNAPSHOT' }
- Gradle / buildscript
-
拡張プロパティやレポジトリ、ビルドツールの依存を記述
ライブラリの依存は別の場所buildscript { ext { // extended property springBootVersion = '2.0.0.BUILD-SNAPSHOT' } repositories { mavenCentral() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } }
- Gradle / タスク名は前方一致で特定できれば省略できる
- 公式参照
- Gradle / -x
-
依存しているタスクを省略
$ gradle --daemon jar :compileJava :processResources :classes :jar BUILD SUCCESSFUL Total time: 2.217 secs -- $ gradle --daemon jar -x compileJava :processResources UP-TO-DATE :classes :jar UP-TO-DATE BUILD SUCCESSFUL Total time: 0.844 secs
- Spring / URLをパラメータとして受け取る
-
@RequestMapping("/{param}") public String calc(@PathVariable int param) {
ちなみに、型が違うと下記のように怒られますTue Feb 07 22:24:50 JST 2017 There was an unexpected error (type=Bad Request, status=400). Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "hoge"
少数は問題なかったです。 - intelliJ + lombok
-
Qiita IntelliJ IDEA+GradleでLombokを使う
Enable annotation processing にチェックが覚えられない
Welcome画面で設定すればデフォルト設定できます。
現在Gradleの設定は、 compileOnly "org.projectlombok:lombok:1.16.12" でした
また、ディレクトリのインポート時にbuild.gradleにlombokをdependenciesに記載していなかった場合、
build.gradleに追記後、それをsynchronizedする必要があるみたいでした。
少なくても自分の環境では、synchronizedしないとimport lombok.*;は認識しませんでした。- @Data:getter/setter/toString/equals/hashCode
- @AllArgsConstructor
- @NoArgsConstructor
- Spring / org.springframework:springloaded
-
htmlファイルの更新時に、再読み込みをするライブラリ
参照: Qiita Spring Boot + Thymeleaf + Tomcat + Gradleで業務系アプリ 躓いた所6点
開発効率上げるために入れたほうがいい。buildscript { ext { springBootVersion = '1.5.1.RELEASE' } repositories { mavenCentral() } dependencies { classpath ("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath "org.springframework:springloaded" } }
Thymeleaf自体はgradleで
compile "org.springframework.boot:spring-boot-starter-thymeleaf"
またまた、thymeleafのキャッシュは開発時には切っておきます。[application.properties] spring.thymeleaf.cache=false
- Spring / @Controllerと@RestController
-
かなり恥ずかしい話ですが、違いがよくわかっていなかった。
@Controllerが付いているクラスのメソッドの戻り値は、HTMLテンプレートのファイル名
@RestControllerがついているクラスのメソッドの戻り値はHTTPレスポンスボディ
参考:Qiita Spring MVCのコントローラでの戻り値いろいろ - Git / **/で再帰的にignore
-
参考:MindTo01s git-ignoreの設定
- Spring / 2.0.0-SNAPSHOTで超絶シンプル@Controllerサンプルを試してみるも。。。
-
ルーティング(@RequestMapping)がうまくいかず、ファイルがあるのに404が出た
hotload=ONやhtmlcache=OFFの設定があったので、とりあえずミートしてみましたが、変わらず。
1.5.1.RELEASEで同じコードを試したら、問題なくルーティングできた。
無駄に時間食ったわ。。。 - Spring / ModelとModelAndView
-
Modelはセッションの属性値を持つだけ。
ビューのファイル名は別途メッソドの文字列返り値として渡す。
一方、ModelAndViewはセッションの属性値に加え、viewNameとしてビューのファイル名をもつ。// Model @RequestMapping("/{num}") public String index(@PathVariable int num, Model model) { model.addAttribute("msg", "arg: " +num); return "index"; // index.htmlを開く
// ModelAndView public ModelAndView index(@PathVariable int num, ModelAndView modelAndView) { modelAndView.addObject("msg", "total: " + res); modelAndView.setViewName("index"); return modelAndView; // index.htmlを開く
- IntelliJ w/Mac 1行消す
-
Command + delete
Qiita 忙しい人のためのIntelliJ IDEAショートカット集(´-`)
Command + dかと思ったんですが、逆に1行増えました。。。。Duplicateっすね。 - Spring / フォームの値受け取り
-
@RequestParam("form_name") Type var_name
public ModelAndView submit(@RequestParam("name") String name , ModelAndView modelAndView) {
- forwardとredirect
-
forwardはURLは元のまま、
redirectはURLも遷移後のものとなります。Modelの場合 return "forward:/"; ModelAndViewの場合 return modelAndView;
0 件のコメント:
コメントを投稿