Spring解体新書第二版ハンズオンメモ

eclipseではなくIntelliJで進める。
SpringBootのバージョンも2.7.0で進める。
Javaのバージョンは17。

3.3のDBからの値取得で詰まった。
どうやらプロパティの設定方法がSpringBoot2.5.1から変わったよう。
かんたんに記事にまとめた

6章のlogin.htmlなどの
<label for="userId" class="sr-only">userId</label>
がinvalid id referenceとIntelliJから怒られている。いったん動くので無視

6.1.2でmessages.properties
から値が読み込まれなくて困っている

NG : <label for="userId">"#{userId}"</label>
OK : <label for="userId" th:text="#{userId}"></label>

今度は文字化け

IntelliJのpropertiesファイルがUTF-8で開かれていなかった
Editor > File Encodingsから設定

探してもなさそうなので、htmlのコピペができないのがしんどい・・・
各章終了時点のコードを誰かのために残しておくか。。
6章終了時点がこれ

7章終了時点

MyBatisのInvalid bound statement (not found):
でめっちゃ詰まった。
mybatis.mapper-locations=classpath*:/mapper/h2*.xml
を
mybatis.mapper-locations=classpath*:/mapper/h2/*.xml
にして解決

Recordを使ってたのでModelMapperが使えなくて悩んでいた。
公式ではサポート外みたい。
自前実装してみたので、Issueにもコメントしてみた。
公式でサポートする予定ならPRを作ってOSS活動する予定。

まあ、スーパー面倒だったので公式でサポートされない限りはおとなしくPOJOでやるのがいいと思う

8.2.1終了時点

8.3.2でDepartmentにうまくマッピングできずに困っていた。
NG: <select id="findOne" resultType="MUser">
OK: <select id="findOne" resultMap="user">

8.3終了時点

8章終了

9章終了

10章終了

WebSecurityConfigurerAdapterがDeprecatedになってるので新しい書き方で書いてみる

こちらを参考にWebSecurityCustomizerとSecurityFilterChainをBean登録した

インメモリ認証はすんなりできたけどユーザーデータでの認証に超手こずっている。
おそらく、JDBC認証にしなきゃいけなくて認証の仕組み大きく変えなきゃ動かなそう。

基本的には以下の記事を参考に
一部それでも困った部分はこうやって解消したを記事に残した

11章終了。

12章終了

13章終了。おわり〜

READMEかいた。

雑感
- たしかに、SpringBoot使えば素早くいい感じのアプリが作れるなぁと思った
- 本自体は結構いい感じの構成だったと思う。基本的にはハンズオンでサクサク進められた。
- MyBatisとかapplication.propertiesとか、ModelMapperとか一部名前解決してるので何が間違ってるのかがパッとわからなくて苦労した。
- 最初は面倒かもしれないけど、ModelMapperなんかはきちんと自前で実装した方がいいかもと思った。特にプロダクションコード。
- プロトタイプとかならいいかも
- Springはバージョンアップで結構大きく変更入る
- SpringSecurityとかは特に大きな変更で結構大変だった。
- jQueryとかデバッグ大変そう。マジで写経になってた。
- thymeleafを使ったhtmlテンプレート使った実装もわりかしデバッグしんどそう。typoに苦しめられた。