親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。育児のイロハという育児サイト(https://ikujip.jp)の開発も行っているため、その開発で使用されている技術についても掲載しています。

Spring Boot

Spring Data JPA のfind+OrderByで、No property desc foundエラー時の対処法

Spring Data JPAでのOrderBy Spring Data JPAでエンティティクラスにfindして複数のレコードを取得する場合、OrderByをつければ並び順を変更できることはご存知でしょうか? findByNameOrderById(Spring name) などとすれば、nameで絞り込んだ上で、idの降順…

Spring Bootで実行SQLのログを取得する方法

アプリケーション開発でのSQLログ アプリケーションの開発をしている時、実行されたSQLのログを参照したい場面がありますよね。 想定外のSQLが実行されていないか確認したり、ボトルネックとなっているSQLを確認したりなど。 Spring BootではそのようなSQLの…

Spring BootでEntityオブジェクトのクローンをしてみる

Entityオブジェクトのクローン SpringBootで機能の実装をしている中で、Entityオブジェクトのクローンを作りたくなることはありませんか?例えばコピー機能などを想像してみてください。 いちいちオブジェクトをnewして、同じ値を全てsetして保存する...そん…

SpringBootでローカルjarファイルをMavenで管理

ローカルjarファイルはどんな時に使う? 普段SpringBootで外部ライブラリを使う時、Mavenの設定ファイルであるpom.xmlを使う人が多いのではないでしょうか。Mavenのリポジトリにあり、誰でもインストールして使えるライブラリだとそのやり方で問題ないのです…

Spring Boot + MySQLで絵文字を保存する

絵文字を保存したい スマホが普及してから絵文字を文中に入れるのはもはや普通のことですよね。 掲示板などでも絵文字を入力できるものは増えていますよね。Webアプリの開発者の中には絵文字を入力できるフォームを作りたいという人もいるのではないでしょう…

Spring BootのFormクラスでIntegerの項目にNULLはPOSTできない

NULLをPOSTした時点でStringとして認識されてしまう Spring Bootにおけるフォームから値をPOSTする際の挙動になりますが、Integer型の変数にNULLを送信すると以下のようなエラーが発生してしまいます。 Failed to convert property value of type 'java.lang…

SpringBoot 開発環境で簡単SSL対応

開発環境でもSSL対応をする理由 最近のwebアプリケーションでは、SSL対応させることが当たり前になっていますよね。 Let's Encryptなどもあり、無料で設定することもできるようになってきました。ただ、webアプリケーションによっては、SSL対応をしている場…

Spring Bootのトランザクションが効かない場合のチェック項目

Spring Bootでのトランザクション設定方法 Spring Bootでトランザクションを設定する方法としては、TransactionManagerを使う方法と@Transactionalというアノテーションを使う方法があります。 コード量の関係やメンテナンス性などを考慮しても後者を選んで…

Spring Boot Devtoolsを使って自動再起動

Javaなどソースの変更をいちいちコンパイルをして確認する場合、 毎回コンパイルを手動でするのは面倒ですよね。 (慣れている人は何も感じないかもしれませんがw)Spring Bootでは自動でコンパイルをしてくれるツールがあるので、 少しは開発効率を上げるこ…

Spring Boot のJavaバージョンを変更

Intellijなど、IDEで開発する場合はJDKをインストールして使うので問題ないと思いますが、 本番環境にアップした場合などにJavaのバージョンを指定しておかないと開発環境で開発した通りに動作してくれないなどの問題が発生してしまいます。変更箇所はpom.xm…

Spring Bootの起動時にJDKのエラー(警告)が発生

Javaの一部JDKのバージョンでは、 Spring Bootの起動時に以下のエラー(警告)が発生することがあります。 /Library/Java/JavaVirtualMachines/jdk1.8.0_141.jdk/Contents/Home/bin/java ... objc[3929]: Class JavaLaunchHelper is implemented in both /Libr…

NekoHTMLを用いて、Thymeleafの厳しい文法チェックを回避

ti-tomo-knowledge.hatenablog.comの記事にも書きましたが、Thymeleafは文法チェックが厳しく、通常のHTMLでは問題ないはずの書き方をしてもエラー扱いされてしまいコンパイルが通りません。 特に閉じタグに関してはmetaタグやinputタグなど、普段閉じタグを…

@PathVariableを必須にしない

Spring BootのGETリクエストでパラメータを設定した時、 パラメータを取得するには@PathVariableを使います。例えば以下のような@RequestMappingがあった場合、idは必須になります。 @RequestMapping(value="top/{id}", method = RequestMethod.GET) String …

Spring BootでBean Validation (3) バリデーション処理を自作

ti-tomo-knowledge.hatenablog.com ti-tomo-knowledge.hatenablog.com上記2つのような流れで、BeanValidationにおける基本的なバリデーションの流れを見ていきましたが、 これらはあくまでBeanValidationやHibernateで事前に用意されたものです。 実際にサー…

Spring BootでBean Validation (2) エラーメッセージの多言語化

まずはti-tomo-knowledge.hatenablog.comを参考にしてmessage.propertiesを使って多言語化する流れを見てほしいです。 これを使えばバリデーション時のエラーメッセージの対応もすぐできます。Bean Validation のアノテーションは、通常messageというパラメ…

Spring Boot Thymeleafで多言語化

多言語対応でサイトを作ることが多い現代だからなのか、 最近のフレームワークは多言語対応がとても簡単です。ここではThymeleafに表示される文字を多言語対応する方法を共有します。 基本的にはmessages_ja.propertiesや、messages_en.propertiesというよう…

Spring BootでBean Validation (1) @GroupSequenceで順番にチェック

Spring Bootでは(Spring Boot以外にもBean Validation使ってるやつ全部ですが)、Serializableクラスに対して 「org.hibernate.validator.constraints」や「javax.validation.constraints」を使って、 @NotEmptyや@Sizeといったようにアノテーションを使うだ…

Thymeleafでth:valueが空になる!?

HTMLタグの中でJavaの変数を使う Spring BootでThymeleafを使う時、HTMLのタグの中に「th:〜」という書き方でJavaの変数を使うことができます。例えば以下のようにすれば、 <input type="text" th:field="*{フィールド名}" /> inputタグのid、name、valueの全てを管理することができ、以下のHTMLタグが発行さ…

Spring Securityで複数のログイン機能を作る時、鍵を握るのは@Order

ti-tomo-knowledge.hatenablog.comまでで基本的なログイン機能のご紹介まで行いましたが、 実際Webアプリを作り出すと、「ユーザ用のログイン画面」、「管理者用のログイン画面」といったように、 ログイン画面を複数用意しなければいけない場面があるのでは…

@Builderのクラスに引数なしのコンストラクタを設置したい

@Builderでコンストラクタを作成 @BuilderはLombokにより使えるライブラリで、 エンティティ呼び出し時にbuilderの生成を簡単にしてくれます。仕組みとして、例えば @Builder public class Test() { private int id; private String name; } とすれば、実際…

Spring Securityを使ったログイン機能 (3)ログイン処理の実装

ti-tomo-knowledge.hatenablog.comにて、アカウント情報の登録まで行いましたが、 次は実際にログイン機能を実装してみます。 ※認証失敗時など、細かい処理まで書くと長くなってしまうので、今回は認証が必ず成功するパターンで書きます。WebSecurityConfigu…

Spring Securityを使ったログイン機能 (2)ユーザ情報登録フォームの実装

ti-tomo-knowledge.hatenablog.comにて、ログイン認証されていない時にログイン画面に遷移される処理の説明をしましたので、 次にログイン画面の実装...に行きたいのですがその前に、 そもそも認証先のデータを用意する必要がありますよね。 そこで今回はユ…

Spring Boot + ThymeleafのCSRFトークン設定は超簡単

Spring Boot + ThymeleafにおけるCSRF対策 近頃のWebアプリケーションフレームワークにおけるCSRF対策は自動で簡単にできるものが多いですが、Spring BootにおけるCSRF対策でのformタグへのトークン付与もとても簡単です。 「spring-boot-starter-security」…

Spring BootでFlywayを使ったマイグレーション

Spring Bootのマイグレーション 開発をするにあたってDBのバージョン管理をしっかりするためにもマイグレーションは必要です。 Spring Bootでは、Flywayを使えばとても楽にマイグレーションを行うことができます。※この手順では、application.ymlなどに以下…

Spring BootでJPAを使用したデータベース設定

Spring BootでJPAの設定 Spring Bootでデータベースを利用するために、JPAの設定をしようと思います。 そもそもJPAとは「Java Persistence API(Javaの永続化のAPI)」の略であり、Javaの純正技術として浸透しているORMの仕様です。 なので、実際にはORMの技術…

Spring Securityを使ったログイン機能 (1)未ログイン時の画面遷移

Spring BootのSpring security Spring BootにはSpring securityという認証と認可を司るコンポーネントがありますが、これを使いながら数回に分けてログイン機能を実装したいと思います。 未ログイン時にログインフォームに遷移する動きから、最終的にはデー…

Spring BootのThymeleafでmetaタグは閉じなければエラー!?

Whitelabel Error Page Spring BootでThymeleafで実装したテンプレート(htmlファイル)を呼び出す時、 「Whitelabel Error Page」とか言う以下のエラーが発生。なんだろうと思い、コンソールを覗いてみると以下のエラーメッセージが出ていました。 org.xml.sa…

IntellijでSpring Bootを5分で起動させる簡単セットアップ

Spring BootをIntellijで起動 Springのフレームワークといえば、Eclipseのプラグイン(STS)で動かす方法が有名ですが、 Spring BootともなるとIntellijでも容易に動かせます。 実験的にHello Worldを出力したのですが、非常に簡単だったのでやり方を共有です…

Spring Framework IntellijでHello World!!

Spring Frameworkでの初期設定は、どこを見てもEclipse(STS)を使った方法ばかりですよね。 でも私はIntellijに慣れてしまっているので(ショートカットとか覚えるの面倒だし( ´Д`))、 できればIntellijでできるようにしたいと考えました。以下で「Hello Wo…

IntelliJにSpring Frameworkをセットアップ

Spring Frameworkをローカル環境でセットアップ 以下のバージョンでSpring Frameworkをローカル環境で動かせるようにしました。 Java 1.8 Spring Framework 4.3.5 Maven 3.3.9Maven(メイバン)は環境構築の段階ではビルドツールとして認識してください。 POM…