- 1. #33 エラー処理 [共通エラー、HTTPエラー毎のエラー]
- 2. JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ③音声をストリーミング
- 3. 【Reactor】特定の条件の時だけRetryする
- 4. Javaのメソッド参照で注意べきすること
- 5. Struts2のValueStackの構造
- 6. Basic認証有りProxy環境でDBeaverを使用する時にハマったのでメモ
- 7. JavaでExcelのセルに目盛線(グリッド線)またはボーダーを適用する方法
- 8. Spring Boot フォーム入力のエラーメッセージを簡単に出す
- 9. [Java] 防御しすぎない防御的プログラミング
- 10. Sudachi Java: 辞書のビルド
- 11. curry化と部分適用をJavaで ~命名編~
- 12. thymeleaf + SpringでJavaの定数やEnum、Staticメソッドを使いたくなったときの対処法
- 13. 抽象クラスと多態性の演習
- 14. 【Java】JavaおじさんのJava放浪記:その6(コレクション)
- 15. try-catch文の使い方まとめ②
- 16. regular expressionによるmatching
- 17. JavaでSpotify Web API叩いてみた
- 18. instanceが同一か確認。equals method
- 19. Integerクラスについて。
- 20. 今さらJavaラムダ式
#33 エラー処理 [共通エラー、HTTPエラー毎のエラー]
# #33 エラー処理 [共通エラー、HTTPエラー毎のエラー]
今回はエラー処理に関して学んでいきます。# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため所々説明は省略します。# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
mybatis-spring-boot-starter ver 2.2.2
Model Mapper ver 3.1.0
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46
thymeleaf-layout-dialect ver 3.0.02. 依存関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/58b53ccd-7cf2-2d82-4214-9f0c08fced2e.png)# 成果物
共通エラー画面
![imag
JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ③音声をストリーミング
:::note info
この記事は [TLB Enjoy Developers Advent Calendar 2022](https://qiita.com/advent-calendar/2022/tlb-enjoy) の24日目の記事です。
:::## 概要
前回に引き続き、2Dバーチャルオフィスっぽいツールを作っていきます。
[JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ②gRPC bidirectional streaming](https://qiita.com/kdr250/items/7eae0cfd31f24ccc0569)ちなみに出来上がったものは↓になります。それっぽいものができたのではないでしょうか。
![スクリーンショット 2022-12-23 17.47.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710108/4697e565-1cf9-4bd6-4e01-3c84ee6d8efd.png)## 今回の目的
今回はマイクで拾った音声を
【Reactor】特定の条件の時だけRetryする
# やり方
`Retry`にはリトライの条件を指定する`filter`を付けることができます。
これによって特定条件の時だけ`Retry`する処理が書けます。例えば、`MyException`の時だけリトライしたい場合は以下のように書くことができます。
“`java
/* 略 */
.retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(1)).filter((it) -> it instanceof MyException));
“`https://projectreactor.io/docs/core/release/api/reactor/util/retry/RetryBackoffSpec.html#filter-java.util.function.Predicate-
# 参考にさせて頂いたページ
https://stackoverflow.com/a/58521980/13709749
Javaのメソッド参照で注意べきすること
java 8 では様々な機能が追加され、その中でも「ラムダ式」はかなり注目され、話題にもなりました。
同じバージョンで「メソッド参照」という機能も追加されましたが、注目度はイマイチのようです。
ラムダ式に比べると、できることも限られるし、そもそもラムダ式で代用できるため、致し方ないかもしれません。
ただ、メソッド参照で記述するとコード量が減り、かなりスッキリします。
そして、自分が好むか好まざるかに関わらず、既存のコードに含まれていれば、嫌でも理解しなければならないでしょう。
ということで、今回はメソッド参照についての記事となります。
メソッド参照を使うとスマートに記述できますが、結構わかりにくいところや落とし穴があるように感じました。
そのあたりを見ていこうと思います。
まずはテストで使用するコードです。“`java:Greeter.java
package test01;public class Greeter {
private String greet;public Greeter(String greet) {
this.greet = greet;
Struts2のValueStackの構造
# 概要
Struts2ではView-Model間のデータ受け渡しやOGNL式の適用対象としてValueStackを利用している。ValueStackはインターフェースでありStruts2におけるデフォルトの実装はOgnlValueStackである。
ここではOgnlValueStackの構造と利用方法について説明する。# ValueStackの構造
ValueStackはrootとcontextの2つの領域で構成される。|名称|型|説明|
|-|-|-|
|root|CompoundRoot|OGNL式に指定したプロパティやメソッド呼び出しの対象となるオブジェクトが格納されるスタック。Actionクラスのインスタンスなどが格納される。スタックなので後から格納された項目から取り出される。|
|context|OgnlContext|HTTPリクエストやセッションなどが格納されるMap。OGNL式からそれらにアクセスする際に使用される。|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
Basic認証有りProxy環境でDBeaverを使用する時にハマったのでメモ
# この記事で説明すること
DBeaverをProxy環境(Basic認証有り)で使用できるようにする方法## DBeaverの説明
DBeaverとはJavaで開発されたマルチプラットフォーム(Mac,Windows,Linux全てで使える)のGUIデータベースクライアントアプリケーションです。
OS問わず使えるし、MySQL、PostgreSQL、SQLite、Oracle……等主要なDBMS製品は大体サポートしているのが素敵…☺️## 発生した問題
Proxy環境(Basic認証有り)にDBeaverをインストールして使用したところ、下記2つの機能が使えなくなっている
– 各DBMSのドライバダウンロード
– DBeaverのバージョン更新
エラーメッセージを確認すると
“`
Proxy returns “HTTP/1.1 407 Proxy Authentication Required”
“`
と、Proxyが407認証エラーを返していた## 解消方法
dbeaver.exe をインストールしたフォルダに
dbeave
JavaでExcelのセルに目盛線(グリッド線)またはボーダーを適用する方法
罫線と目盛線は同じではありません。目盛線は、ワークシート全体を貫く1画素単位の灰色の線です。主な目的は、ワークシート上で作業する際に、セルの境界を確認できるようにすることです。目盛線は、セルや枠線に色を付けると見えなくなります。罫線は、さまざまな幅や2重の線を持つことができ、色をつけることもできます。罫線は常に通常の印刷と一緒に印刷されます。
今回は、無料の[Free Spire.XLS for Java](https://jp.e-iceblue.com/introduce/free-spire-excel-for-java.html)を使って、Javaで**Excelのセルに目盛線や罫線を適用する方法**を紹介します。
– **[ワークシートに目盛線を表示する](#ワークシートに目盛線を表示する)**
– **[データを含むセル範囲に罫線を適用する](#データを含むセル範囲に罫線を適用する)**
– **[選択されたセル範囲に罫線を適用する](#選択されたセル範囲に罫線を適用する)**
## 【依存関係の追加】
この方法は、無料のFree Spire.XLS for Javaが必要
Spring Boot フォーム入力のエラーメッセージを簡単に出す
## はじめに
今回はフォーム入力のエラーメッセージを簡単に実装する方法です。
## Entityクラス
今回は書籍投稿アプリのEntityクラスのコードです。
“`
@NotBlank(message = “入力必須です!”)
@Column(name = “title”)
@Size(max = 30)
private String title;@NotBlank(message = “入力必須です!”)
@Column(name = “genre”)
@Size(max = 10)
private String genre;@NotNull(message = “入力必須です!”)
@Column(name = “favorite”)
@Min(0)
@Max(5)
private int favorite;@NotBlank(message = “入力必須です!”)
@Column(name = “content”)
@Size(max = 500)
private String conten
[Java] 防御しすぎない防御的プログラミング
## はじめに
最近「防御的プログラミング」という言葉を記事を読んでいて知ったのですが、
どうもサンプルコードを手続型プログラミング的なコードばかりでてきて
納得がいかないので、オブジェクト指向プログラミングやSpring AOP、Lombokなどを用いて
防御的なプログラムを書いてみようと思います。## 概念のおさらい
具体的なコードに触れる前に
「防御的的プログラミング」と「契約プログラミング」の概念をおさらいしておきましょう。### 防御的プログラミング
現場で役立つシステム設計の原則[^1]で説明されている防御的プログラングの定義は以下の通りです。>「サービスを提供する側は、利用する側が何をしてくるかわからない」という
>前提でさまざまな防御的なロジックを書きます。
>利用する側も、提供側が何を返してくるかわからないという前提で、戻ってきた値のnull チェックや、
>さまざまな検証のコードを書きます。### 契約プログラミング
一方同一書籍より、契約による設計とも呼ばれる契約プログラミングの定義は以下のようになっております>サービスを利用する側と、サービス
Sudachi Java: 辞書のビルド
# 初めに
これまでSudachi辞書のビルドはCLIのみサポートしていたのですが、Sudachi Javaの0.6.0以降はAPIが存在しています。アプリケーションでユーザー辞書を使うときなどに、動的に辞書をコンパイルすることができるようになりました。:::note warn
紹介するAPIはExperimentalです。1.0リリースまで変更する可能性があります。紹介するコードは変更なしで動くでしょうが、それ以外のメソッドは変更される可能性が高いです。
:::# システム辞書をビルドしましょう
まずは[辞書ソースのCSV](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/)をダウンロードしてください。small, core, fullで複数のファイルを使う場合は同じバージョンのCSVファイルを使ってください。
## システム辞書
このAPIは`com.worksap.nlp.sudachi.dictionary.build.DicBuilder`によって実装されています。ビル
curry化と部分適用をJavaで ~命名編~
この記事は アイスタイル Advent Calendar 2022 23日目の記事です。
https://qiita.com/advent-calendar/2022/istyle
# はじめに
みなさんこんにちは。
入社4年目、アイスタイルのバックエンドサービスを担当しているkuriyamayです。
アドベントカレンダー2本目の投稿になります。1本目は`curry化と部分適用をJavaで`という内容で記事を書きました。
今回は既存メソッドをcurry化・部分適用して、さらに命名にも気をつかった記述にしたいと思います。curry化や部分適用とは?という方は1本目の記事をご覧ください。
https://qiita.com/kuriyamay/items/45f69ceda78d88acd871
# 既存メソッドのcurry化と部分適用
2つの引数を受け取り結果を返すメソッドがあります。
例のため、分かりやすいように2つのStringを受け取り結合して返すだけの簡単な処理です。
“`java
public String concat(String left, Str
thymeleaf + SpringでJavaの定数やEnum、Staticメソッドを使いたくなったときの対処法
# はじめに
以前に書いた記事の続編です。
https://qiita.com/n_slender/items/d0e2a861dcc806b5882e
「thymeleaf enum」「thymeleaf constant」で検索すると、 `T(my.package.MyEnum).MONDAY`, `${T(com.baeldung.thymeleaf.model.Color).values()}`, `T(com.example.Constants).MIN_VALUE` といった、thymeleafから直接呼び出すような形の記事がでてくることが多いです。
https://stackoverflow.com/questions/24937441/comparing-the-enum-constants-in-thymeleaf
https://stackoverflow.com/questions/68686397/how-to-use-variables-from-a-constants-class-in-thymeleaf-numbers-sequence-met
抽象クラスと多態性の演習
# 問題
OnitaijiPolymoクラスを抽象クラスとして継承したクラスPeachBoy, Dog, Monkey, Kijiを作り、fightメソッドをオーバーライドしてください。Mainクラスではポリモーフィズムを用いて、各クラスのfightメソッドを呼び出してください。“`java:抽象クラス
package p_polymo;
//修飾子の後にabstractで定義
public abstract class OnitaijiPolymo {
public abstract void fight();
}
“`“`java:子クラス
package p_polymo;public class PeachBoy extends OnitaijiPolymo {
private String name = “桃太郎”;@Override
public void fight() {
System.out.println(this.name + “は刀で戦った!”);
}
}
“`
“`java:子クラス
package p_polymo;
【Java】JavaおじさんのJava放浪記:その6(コレクション)
# はじめに
こんにちは、Javaおじさんです。
今回は、Javaにおけるコレクションについて大まかにまとめていきます。
何卒宜しくお願いいたします。## 記事の内容
– Javaにおけるコレクションの扱いについて大雑把に理解していく。
# Javaにおけるコレクション
## コレクションとは
– 複数のデータ(=要素)を保存できる箱
– リスト、セット、マップの3種類に大別
– 要素の型に基本型を指定できない → ラッパークラスの使用## リスト
– 各要素に順序がある (最初の要素は0番目)
– ArrayListクラス(大抵これ)、LinkedListクラスの2つがある (内部のアルゴリズムの違い)
“`java
// 使用例
ArrayListfruits = new ArrayList<>(); // => [] (変数の宣言&インスタンスの代入)
fruits.add(“リンゴ”); // => true ( [リンゴ]、末尾に追加)
fruits.add(“フィグ”); // => true ( [リンゴ, フィグ] )
fr
try-catch文の使い方まとめ②
## 目次
[1.throw](#1-throw)
[2.throws](#2-throws)
[3.try-catch文のネスト](#3-try-catch文のネスト)
[4.複数の例外を一気にキャッチする](#4-複数の例外を一気にキャッチする)※「try-catch文の使い方まとめ①」はこちら↓
https://qiita.com/osakanaaaa/items/860eb34aa0b19b5b62c3
## 1. throw
### tryブロック内のthrow
“`java
package jp.co.study.sample;public class Qiita {
public static void main (String args[]) {String str1 = “おさかな”;
try {
Double.parseDouble(str1);
System.out.println(str1 + “:この文字列は数字です”);throw new NumberF
regular expressionによるmatching
find()は部分一致検索
lookingAtは先頭一致
matchesは完全一致
“`java
String s = “ABC1DEF”;
Pattern p = Pattern.compile(“[A-Z]{3}”);
Matcher mc = p.matcher(s);
System.out.println(mc.find());
System.out.println(mc.group());
System.out.println(mc.find());
System.out.println(mc.group());
System.out.println(mc.find());
System.out.println(“—————–“);
System.out.println(mc.lookingAt());
System.out.println(mc.group());
JavaでSpotify Web API叩いてみた
# 本記事について
この記事では、Javaを使用しSpotify Web APIを叩いて、楽曲情報の取得やプレイリストへの追加をしてみた方法を紹介します。:::note info
【 Spotify Web APIとは 】
音楽ストリーミングサービスで有名なSpotifyが提供しているAPIです。
Spotify Web APIによって下記の情報等が取得できます。– アルバム情報
– アーティスト情報
– トラック(楽曲)情報
– プレイリスト情報
:::>**Spotify Web API**
>You can use Spotify’s Web API to discover music and podcasts, manage your Spotify library, control audio playback, and much more.## サンプルコード
今回紹介する機能を実装したサンプルとして、GithubのURLを下記に記載します。
https://github.com/9-sho-5/sys_proj_B01
## 実装について
instanceが同一か確認。equals method
newした2つのinstanceを比較する
“`Sample.java
public class Sample {
int i;
}
“`
“`java
public static void main(String[] args) {
Sample s1 = new Sample();
Sample s2 = new Sample();
System.out.println(s1.equals(s2));
s1 = s2;
System.out.println(s1.equals(s2));
}
“`
“`
false
true
“`
Integerクラスについて。
Stringからintへの変換
“`java
public static void main(String[] args) {
Integer i1 = Integer.valueOf(“2”);
int i2 = i1.intValue() * 3;
System.out.println(i2);
}
“`
“`
6
“`
Integerからintはunboxingのため、intValue()は省略できる
“`java
public static void main(String[] args) {
Integer i1 = Integer.valueOf(“2”);
int i2 = i1 * 3;
System.out.println(i2);
}
“`
“`
6
“`
IntegerのConstructorでもString→intできる
“`java
public static void main(String[] args)
今さらJavaラムダ式
## 1. ラムダ式とは
– JavaSE8から導入された構文
– 関数型インターフェースを簡潔に記載することができる“`java
Listlist = new ArrayList<>(Arrays.asList(“A”, “B”, “C”)); // こういうやつ
list.forEach(i -> System.out.println(i));// 結果
// A
// B
// C
“`## 2. 無名クラス(匿名クラス)と関数型インターフェース
### 無名クラス(匿名クラス)とは
– 名前がないクラスのこと
– 一度きりしか使わないといった場合に使用する
– コードの記載が綺麗になる無名クラスを使用する場合、new class名()の後に{}を記載します
※関数型インターフェースのConsumerを使用していますが後で説明あります*無名クラスを使用しない場合*
“`java
class CustomConsumer implements Consumer{
@Override
public v