Java

SpringBoot で gson使用

Jackson も、Google gson も spring-boot-starter-json で利用するための構成があります。 SpringBoot で、gson だけに使用を絞りたい時はどうすればいいのでしょう。まずは、Gsonを使うための設定 for Gradle build.gradle dependencies { compile group: '…

Jackson 未定義フィールドのJSON読込み、JSONコメント

JSON にコメントを書く場合、いろいろあって よく紹介されてるのが、、 Hjson ( .hjson ) https://hjson.github.io/JSON5 ( .json5o ) https://json5.org/JSONC ( .jsonc ) https://github.com/microsoft/node-jsonc-parser Visual Studio Code 向け、ですが…

エポックミリ秒または秒数をJSONデシリアライズ

Jackson でJSONで表現されたエポックミリ秒またはエポック秒数を、 デシリアライズするには、次のカスタマイズ デシリアライザを用意して、 jackson-datatype-jsr310 の JavaTimeModule に登録して、 ObjectMapper にセットする。LocalDateTime として読込ま…

JSONとマップする任意クラスを定義しないでJSONの値を変更

Jackson あるいは、Google gson を使用して JSON → JavaクラスObject → 属性値の変更 → JavaクラスObject → JSON という流れを組むのがほとんどの方法であるが、 そうではなく! Jackson でJSONを読み込んだ結果の JsonNode を 変更して、toString() や、Obj…

JWT JSON読込み

JSON Web Tokens - jwt.io のJSON読込みについて、、、 デコードしたJWT の getClaims() が返す Mapが、Claimインスタンスのマップであるが、 この Claimインスタンスは、隠されたクラス com.auth0.jwt.impl.JsonNodeClaim である。 この JsonNodeClaim が値…

Jackson 2.12 から、PropertyNamingStrategy.SNAKE_CASE は、非奨励になってた。

JSON を解析、出力で使うJackson で、JSONのキー、 Property Name を Snake CASE にしたり Camel CASE にしたりする PropertyNamingStrategy.SNAKE_CASE PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES は、バージョン 2.12 から、@Depr…

Map の値にリストなどを持たせる場合の書きやすさと効率

リストなどコレクションを Map にする構造では、キー存在有無によってどうしても 初期リスト、コレクションを格納しなければならない。 Map<String, List<String>> map = new HashMap<>(); if (!map.containsKey("a")) { map.put("a", new ArrayList<String>()); } map.get("a").add("100"</string></string,>…

throwable な Function を使うケース

先日の Jackson 使用する JSON解析の方法では、 oboe2uran.hatenablog.comJSON構造の中階層のキーを任意クラス型に変換させる場合、 ObjectMapper から com.fasterxml.jackson.databind.ObjectReader を取得して、 readValue(JsonNode) メソッドを実行すれば…

Jackson JSON読込み、key-value 解析を柔軟にする

Jackson JSON読込みで、JSON key-value を BiConsumer はまたは、Stream 生成する方法を Jackson でJSON読込み key-value の BiConsumer を処理する - Oboe吹きプログラマの黙示録Jackson でJSON読込み key-value の Stream生成 - Oboe吹きプログラマの黙示…

Jackson でJSON読込み key-value の BiConsumer で、日付時刻も

oboe2uran.hatenablog.comoboe2uran.hatenablog.comを書いたが、日付時刻は、LocalDate LocalDateTime で読み取りたいという要求に応えるために 以下のようにする。 import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; i…

Jackson の 日付時刻の読込み

JSR310 Date And Time API に従ったJacksonは、 jackson-datatype-jsr310 を使用する。 Maven 利用なら、pom.xml は、全部で <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> </dependency>

クラスと同じclasspath の場所に置いたファイルのIO(2)

先日書いた、 クラスと同じclasspath の場所に置いたファイルのIO - Oboe吹きプログラマの黙示録よくよく考えたら public File getCurrentPathFile(String path) throws IOException{ try{ return Optional.ofNullable( ClassLoader.getSystemClassLoader().…

Predicate 結果で Function 実行する

任意の検査をして Function<T, R> を実行する。 これは、stream か、Optional で filter 実行後に map あるいは flatMap を実行と ラムダ式を連結して記述すれば済むことではある。例)日付文字列→LocalDate String str; // TODO 日付文字列をstr に格納 LocalDate</t,>…

クラスと同じclasspath の場所に置いたファイルのIO

resources ではなく、Javaソースと同じ場所にファイルを置いて ビルド後の classes の同じパッケージ階層に配置されたファイルを読み込む方法、java 拡張子以外のファイルもビルドで、class と共に同じ場所に配置されるころが前提条件であるが、以下のように…

gson でJSON読み込んで、Key と Value

先日、Jackson でJSON読込み key-value の BiConsumer を処理する - Oboe吹きプログラマの黙示録Jackson でJSON読込み key-value の Stream生成 - Oboe吹きプログラマの黙示録 を書いたので、gson で同じことをします。JSONキーは、"." で区切り、配列は、[n…

Jackson でJSON読込み key-value の Stream生成

先日の oboe2uran.hatenablog.comさらに、以下のメソッドも追加すると便利かもしれない。 public Stream<Entry<String, Object>> stream(String jsontxt){ Stream.Builder<Entry<String, Object>> builder = Stream.builder(); ObjectMapper mapper = new ObjectMapper(); try{ parseJson(mapper.readTree</entry<string,></entry<string,>…

Jackson でJSON読込み key-value の BiConsumer を処理する

JSON を Jackson の ObjectMapper でクラスにマッピングするのではなく、 JSON キー と 値の BiConsumer を実行する。ObjectMapper の readTree メソッドで取得する JsonNode を使用する。 import java.io.IOException; import java.io.InputStream; import …

gson や Jackson に頼らない JSON の読込み

非奨励の nashorn 使用する方法でなく、別の方法です。 有名な Graal VM の助けを借りる方法です。 https://www.graalvm.org/ 準備: Maven pom.xml <dependency> <groupId>org.graalvm.js</groupId> <artifactId>js</artifactId> <version>21.0.0.2</version> </dependency> <dependency> <groupId>org.graalvm.js</groupId> <artifactId>js-scriptengine</artifactid></dependency>

gson や Jackson に頼らない JSON の読込み(非奨励の方法)

標準ライブラリにある javax.script.ScriptEngine で、 JavaScript として解釈させて Nashorn で参照する方法です。 Google gson みたいな高機能は期待できません。 Nashorn は、Java11 から非奨励です。 Java15 から廃止されてます 書いては、みたものの、…

Jackson でJSON読込み時、フィールド存在しない場合

Jackson で ObjectMapper による JSON 読込で、JSONキーに対してクラス側にフィールドが存在しないと UnrecognizedPropertyException を発生するわけだが、それを無視して読込みさせたい時は、 @JsonIgnoreProperties クラスアノテーションで、ignoreUnknown…

ClassCastException を配慮した cast 処理

instanceof 演算子で if文を書くのが嫌な時、 Class の isInstance メソッドで制御したOptional変数で処理する方法、、、 単に cast する。 Food f = Optional.of(pasta) .filter(e->Food.class.isInstance(e)) .map(e->Food.class.cast(e)) .orElse(null); …

Function<T, R>の andThen における NullPointerException の回避

Function<T, R> の andThen , compose は、 以前から、最初の apply 結果が null だったら、 NullPointerException になってしまう不満がありました。 よくありがちなデータ構造 import lombok.Data; @Data public class Bucket{ private Drink drink; } import lo</t,>…

コード値を抱える enum のタイプハンドラ

yipuran-mybatis GitHub - yipuran/yipuran-mybatis: mybatis used application をリリースやり直した。 enum のタイプハンドラを書いたのだが、 コード値を抱え持ち、コード値を参照するインターフェースに static メソッドを書いていたのだが、enum 実装と…

mybatis の enum TypeHandler を汎用的にする。

mybatis が enum に対するハンドラは、列挙名だけのマッピングなら、 org.apache.ibatis.type.EnumTypeHandler 列挙の並び、enum の int ordinal() メソッド、(0始まり、序数=0)で満足なら org.apache.ibatis.type.EnumOrdinalTypeHandler をで良いのだ…

コンストラクタで値を抱える enum 列挙型の汎用インターフェース

Java の enum 使用でよく列挙名と共にコード値を定義して使用したりする設計は 常套手段の1つである。 public enum Frame { Gold(101), Silver(101), Bronz(102); private int value; private Frame(int value) { this.value = value; } public int getValu…

Functionの結果をBiConsumerで実行する(3)

2回も投稿した Functionの結果をBiConsumerで実行する - Oboe吹きプログラマの黙示録 Functionの結果をBiConsumerで実行する(2) - Oboe吹きプログラマの黙示録 だが、まだまだ改良の余地がある。andThen なる and で連結の書き方をもっと短くできるはず…

Functionの結果をBiConsumerで実行する(2)

昨日書いた、 Functionの結果をBiConsumerで実行する - Oboe吹きプログラマの黙示録 もっとよく考えてみれば、、 ApplyBiConsumer のリストではく、 続けてafterオペレーションを実行する andThen を使うのが良さそうである。 BiConsumer継承の方法では、 im…

Functionの結果をBiConsumerで実行する

Webアプリ開発をしているとよく、画面プレゼンテーション層と サービスロジック層の間の為にコンバータなるものを作らされたりして 面倒なものです。 よく書かされてしまう、getter で持ってきて、setter に食わせる a.setPhonNumber(b.getPhoneNumber()); …

String の null チェック、空チェック

Java11 を使うようになっても、 org.apache.commons.lang.StringUtils.isEmpty(String) や、 org.springframework.util.StringUtils.isEmpty(String) を外部JARを使って、nullチェックの代わりと "" でないことをチェックする コードをよく見かけるという哀…

new 演算子で生成する変数のコーディングを減らす方法

私が作った Fieldsetter 以下は、 https://github.com/yipuran/yipuran-core/blob/master/src/main/java/org/yipuran/util/Fieldsetter.javahttps://github.com/yipuran/yipuran-core/wiki#fieldsetterフィールド名称を指定する点で、タイプセーフではない。…