Works by

Ren's blog

@rennnosuke_rk 技術ブログです

Java

【Java】ByteArrayOutputStreamのclose()実装

Closable Java の Closable インタフェースを実装した具象クラスは、 close() メソッドを定義する必要がある。 Closable を実装した抽象クラスに Writer 、継承したインタフェースには OutputStream があり、これらの抽象 I/O を実装したクラスでは確保した…

【Spring Security】セッションのデフォルト有効期限は30分しかない

というかServletの仕様ですね。 Spring Securityにおけるセッションの有効期限 Spring Securityでは、セッション情報をJava Servletで扱うようなHttpSessionとして扱えます。またセッションに紐づく情報は、クッキーであるHttpCookieオブジェクトとして扱え…

【Spring Data JPA】@Queryによる更新/削除クエリには@Modifingアノテーションを付加する

TD;DR Spring Data JPAのRepositoryに@Queryで更新/削除クエリを定義するとき、@Modifingアノテーションを付加します。 @Modifing @Transactional @Query(value = "DELETE FROM PHOTO AS p WHERE p.USER_ID = :userId", nativeQuery = true) public void del…

【Java】log4j2

log4j2 log4j2はJavaのロギングユーティリティであるlog4jの後継です。 厳密にはv1のlog4jがv2担っただけのものですが、プロパティファイルの命名やプロパティの設定方法などが一部新しくなっています。 Log4j – Apache Log4j 2 - Apache Log4j 2 Usage Mave…

【Java】Jacksonがパースする文字列のフィールド名にDouble Quoteがついていない状態でもパース可能にする

Jackson github.com Double-Quote問題 JacksonのObjectMapperでJSON文字列パースしてJavaオブジェクトに変換するとき、フィールド名にダブルクォートがないと怒られてしまいます。 String json = "{user_id: 1, age: 20, item_id: 2, item_name: "hoge"}"; O…

【Java】Jacksonで配列形式のJSON文字列をJavaオブジェクトに変換する

Jackson rennnosukesann.hatenablog.com 配列形式のJSON JSONのrootがオブジェクト形式ではなく配列形式の場合、ObjectMapperによるパースは以前の記事同様TypeReferenceを用いて行うことができます。 rennnosukesann.hatenablog.com rootが配列形式のJSON […

【Java】Jacksonで任意形式のJSONをパースする

Jackson Jacksonについては以下の記事を参照。 rennnosukesann.hatenablog.com 多様なJSONの構造 前回の記事で、JSONをMapオブジェクトにする記事を書きました。 rennnosukesann.hatenablog.com JacksonではJSONファイルやStringオブジェクトとしてのJSONをJ…

【Java】JacksonでJson文字列をMapオブジェクトに変換する

Jackson Jacksonについてはこちら。 rennnosukesann.hatenablog.com JacksonはJavaのライブラリで、JavaオブジェクトをJSON形式にしたり、その逆のこともできます。もちろんJSONファイルへの読み書きも可能です。 JSONをMapオブジェクトに変換する Jacksonで…

【Java】AdoptOpenJDK 11がLTSをサポート

Javaのサポートについて OracleのJavaへのサポート体制の変更が波紋を呼んでいます。 qiita.com www.orangeitems.com Oracle JDK 11の有償化 Oracle Java SE サポート・ロードマップ 事の発端は、OracleがJava 11の提供を有償化する声明を出したことでした。 …

【Java】JAX-WSでJSON Body Parameterをサーバ側でMapとして受け取る

JAX-WSとは JAX-WSはJavaのサーバサイドフレームワークであり、JavaクラスとAPIの構造をマッピングする機能を持ちます。 クラスやメソッドに対してアノテーションを付加することで、簡単にマッピングすることができます。 例えば、APIサーバがapi/hoge/getGE…

【Java】Java8で文字列をBase64変換する

java.util.Base64 Base64.Encoder (Java Platform SE 8) Java8より、Base64によってバイトデータをエンコードできるBase64クラスが実装されました。 このUtilityクラスを利用することで、Java上で容易にBase64エンコード/デコードが利用できます。 Usage imp…

【Java】Jacksonを使ってJSON文字列←→オブジェクト変換を行う

Jacksonとは github.com JacksonはJavaで使えるJSONライブラリです。 JSON形式の文字列をJavaのオブジェクトに直接マッピングしたり、逆にJavaオブジェクトをJSON文字列に変換できたりします。 HTTPレスポンスをパースしたりオブジェクトをBase64エンコーデ…

【Java】Lombokでアノテーションだけでクラスのアクセサを設定する

Lombokとは Lombokは、Javaクラスにアノテーションを付加するだけでかんたんにGetter,Setterなどのアクセサを設定することができるライブラリです。アクセサを書かなくても良い分 Javaクラス定義を短く書くことができます。 Lombokのダウンロード 実際にはID…

【Java】CMS

CMS CMS(Concurrent Mark & Sweep)コレクタは、Javaで用いられるガーベジコレクタです。従来の世代別GC方式を採用していますが、Old領域のGC処理をコンカレントGCと呼ばれる手法によって行います。 従来の世代別GC 従来の世代別GCでは、ヒープをNew領域とO…

【Java】G1GC

Javaのガーベジコレクタ 【Java】JVMのヒープメモリ管理の記事では、JVMがどのようなガーベジコレクタアルゴリズムを搭載しているかについて調査・紹介しました。今回はJavaGCアルゴリズムの詳細実装であるG1GC(Garbage First Garbage Collector)について調…

【Java】Javaの日時/日付に関するAPI(Java8)

Java8による時刻API 前回の記事では、Java7以前で用いられていた日時APIについて紹介しました。しかし、組み込みのAPIとしてはバグの温床となるような仕様が多く、個人的に使いづらさを感じていました。実際、 一般的な開発者が扱うような日付/時間のユース…

【Java】Javaの日時/日付に関するAPI(Java7以前)

システムと時刻 地球上に存在する多くのシステムやアプリケーションは、「時刻」という概念に依存します。例えばRDBテーブル上のレコードが更新日時を持つ、WebアプリケーションクライアントがHTTPリクエストを投げた時刻サーバに伝えるなど、例を上げればき…

【Java】JVMのヒープメモリ管理

JVMとヒープ オブジェクト指向言語として有名なJavaプログラムがコンパイルされて中間言語としてJVM上で動く時、多くのオブジェクトの生成と破棄が繰り返され、それに伴ってヒープ領域の確保や生成が行われます。そのような激しいメモリアロケーションにも関…

【Java】 リフレクションで取得したインナークラスコンストラクタの引数は、エンクロージングクラスのインスタンスを必要とする

背景 ・単体テストでインナークラスのテストをしたい(テストしやすい設計にすべきかどうかは別として)ときに、インナークラスのコンストラクタがprivateの場合、インスタンス化をリフレクションで行いたい。。。 ・このとき、getDeclaredConstructor()で取…

文字列switchについて

気になったのでメモメモ。あとこの機能、Java8からのものだと思ってた。 java7実装の文字列switch 文字列switch構文内で分岐するとする。 public static String getSwitchString(String str) { switch (str) { case "a": return "str is a"; case "b": retur…