Spring Boot 2を使うかもしれないので、本を買って仕様を確認中に、引っかかった問題。
@DataをつけたクラスのprivateフィールドがRESTの口で出てこない
このアノテーションはlombokに含まれているもので、private変数のgetterやsetterを自動で作ってくれると参照している本のサンプルコードに記述されていたものです。
プロパティを自分で定義しなくても、このアノテーションをつけたクラスをREST APIのパラメータに渡せば、JSONから自動で変換してくれるということでしたが、以下のようなエラーがでました。
cannot deserialize from Object value (no delegate- or property-based Creator)
単純なことですが、gradleなどでlombok-1.16.20.jarのようなjarファイルをダウンロードするだけではだめで、ダブルクリックしてインストールしないといけないらしいですね。
https://projectlombok.org/mavenrepo/
一番下のNOTEを参照。
問題解決しようと試行錯誤している最中には、@PostMappingつけたメソッドがHTTP ステータス 415返す問題も発生しましたが、そちらもインストールしたら解決しました。
なお、OpenJDKでも試してみましたが、こちらはインストーラ使わなかったからか、ダブルクリックで反応がなかったので、以下のコマンドでインストールします。
jarの名前はバージョン番号付きの実際のファイル名に置き換えてください。
javaw -jar lombok.jar
log4j2.xmlおいても見てくれない
普段log4netなどを使っているので、log4j2を利用しようと思って、build.gradleにlog4j2のcompile指定をつけてもログがファイルに出力されない。
log4j2.xmlの配置場所や定義をいろいろ変更してみましたが、そうでなくてSpring Boot 2がデフォルトで持っているログ用モジュールを除外しないといけなかったようです。
また、以下の指定でもlog4j-api-2.10.0.jarがProject and External Dependenciesに表示される、log4jのログが利用可能になりました。
dependencies { compile('org.springframework.boot:spring-boot-starter-thymeleaf') compile('org.springframework.boot:spring-boot-starter-webflux') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } compileOnly('org.projectlombok:lombok') testCompile('org.springframework.boot:spring-boot-starter-test') testCompile('io.projectreactor:reactor-test') }
他にapplication.propertiesに
logging.level.root=INFO
logging.file=logs/logfile.log
を指定することで、開発中のアプリケーションパス\logs\logfile.logに出力されるようになりました。