JAVA関連のことを調べてみた2021年01月24日

JAVA関連のことを調べてみた2021年01月24日

java.net.http.HttpClient でHTTPレスポンスを受信するとリクエストがタイムアウトした

事象に遭遇したのは AdoptOpenJDK jdk-11.0.9.1+1。

## 事象発生コード

数年ぶりにJavaで開発を行うことになり、外部APIをHTTPリクエストで呼び出してレスポンスのJSONを受信する必要が出てきた。

最後にJavaで開発した時はJDK 8でHTTPリクエストを行う標準ライブラリは
`java.net.HttpURLConnection`くらいしかなかったが、
JDK 11からは`java.net.http.HttpClient`が正式に標準ライブラリ入りしていたらしいので使用することにした。

JSONからのデシリアライズはJacksonを使おうと考えたが、`HttpClient`はレスポンスボディをreactive-streamsで処理しているらしい。

最も簡単な取り扱い方だと`HttpResponse.BodyHandlers#ofString()`で一度レスポンスボディを`String`にしてからパースする方法だが、
せっかくのreactive-streamsなのでいい感じにデータ受信完了後にJSONを処理できる方法が無いか調べると
`ja

元記事を表示

Java JSP/サーブレット サーブレットクラスを使ってブラウザに「Hello World」を表示させてみた!

#1,環境設定:pencil2:

>Eclipse2020 Full Edition
Java11
Tomcat9

#2,動的プロジェクト作成::blue_book:

#3,サーブレットクラスの作成場所:card_box:

#4、ディレクトリ構造とソースコード:notepad_spiral:

【Java】AtcorderのABC-189に参加しました。

こんばんは。

2021/1/23に、AtcorderのABC-189に参加しました。
レートは以下の通りとなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/b7a21947-8483-3eba-3a53-a599c529d80c.png)

https://atcoder.jp/users/ishikawaryou

C問題は処理時間でエラーになり、良いロジックを思いつけず負けました・・。
まだまだですね。
ともあれレートを13→51に更新!
A問題は5分以内、B問題15分以内で安定して解けるようになってきました。
半年前に始めたときはA問題ですら会社の昼休み中(1時間-お弁当の時間)に解けなかった事を思うと、着実な進歩です。

###A問題

入力した3文字が全部同じか、そうでないかチェックするというもの。
String型で入力した文字列を、char型にして同じかチェックしました。

“`java

import java.util.Scanner;

元記事を表示

MyBatis+SpringBootでCRUDアプリを作る ※余計なものはナシ※ 2/2

前回の記事の続きです。
次はクラスを作っていきます。
前回までの分はこちら
https://qiita.com/sumichan/items/bdc2a0e909416ae55162

# 3-1.Model.java
今回使うのはidとtask(やること)だけです。
`@NotBlank`はvalidationでblank入力を禁止します。
`@Data`でgetter,setterを省略していますが、アノテーションを使わない場合は普通に書いてください。

“`Java
@Data
public class Todo {

private Long id;

@NotBlank
private String task;
}
“`

# 3-2.TodoMapper.java
個人的にmapperから書いていくとわかりやすいです。
必要なSQLを書いていきます。今回だとこの5つを使います。
mapperクラスにはinterfaceのクラスにして、`@Mapper`を付けます。

“`java

@Mapper
public interface TodoMapper {

元記事を表示

MyBatis+SpringBootでCRUDアプリを作る ※余計なものはナシ※ 1/2

MyBatisを使ったToDoリストを作成します。
目標物はこれ↓
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1044070/e731eda6-3645-23d9-11a3-753a460b58b4.gif)

– やることを登録(blankは登録できない)
– やることを見る
– やることを変更
– やることを消去
以上ができる単純なアプリです。

# 作成した経緯
SpringBootのCRUDができる書籍はありますが、MyBatisを使ったものは少ないです。(ほぼJPAかJDBC)
また、BootstrapやJSが混ざったもの、HTMLが複雑なものも多く、私が理解しづらかったため、わかりやすくシンプルなものにしてみました。

# 対象者
– Controller、Service、Repositoryが何をしている何となくわかる人。
– CRUDが何かわかる人。
– JPAやJDBCがなんとなくわかる人。
– MyBatisを初めて使う人。

元記事を表示

VSCodeのターミナルからコンパイル/実行

#はじめに
VSCodeのTerminalからコマンドラインでコンパイル&実行する方法についての備忘。
日本語でコーディングや出力をする場合文字コードのコンパイルオプションが必要。
毎回オプション指定するのがめんどくさい場合は、設定ファイルの編集方法参照。

#Terminal表示
[View]タブから[Terminal]を押下
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402891/54f3e4a1-b78c-3102-24bf-7d44bd4577b4.png)

Terminalが表示されました。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402891/055b6ab5-c2db-4f22-53af-6beaed9a710e.png)

#コンパイル/実行
###ディレクトリ移動

“`
dir
cd src
“`

![image3.png](https://qii

元記事を表示

【Java】UTF-8同士のファイルの入出力をおこなう(文字化けさせない)

こんばんは。関東では今日夜から雪が降るそうです。
風邪をひかないようにあったかくして休みましょう。

今日は文字化けの話です。

### 1.読んでいただきたい方
・Java初心者の方
・出力ファイルの文字化けに苦しんでいる方
・特にデフォルトエンコーディングがMS932の方は、僕の環境と同じなので共感できるかも知れません(調べ方は下記参照)

### 2.はじめに

前回の記事でも書いたのですが、僕はもともとvbscriptでファイルの読み書きをしていましたが、windows10から文字コードがUTF-8になり、文法も変わったのをきっかけにJavaで入出力のプログラムを作る事にしました。

どっこいこれが大苦戦・・。
自分なりにポイントをまとめておこうと思います。

### 3.ポイント
・自分の開発環境のデフォルトエンコーディングを理解する
・入力・出力の文字コードをきちんと指定する

###4.本日の作品

このようなプログラムを作成しました(utftest.java)。
デフォルトエンコーディングがMS932の方も、
以下のプログラムを実行すると、UTF-8→UTF-8のファ

元記事を表示

spring-kafkaのconsumerでjson deserialize型変換エラーをスキップ

spring-kafkaでjsonの型変換などの処理続行不可能なメッセージをskipしたい場合がある。以下はその場合に使えるかもしれない設定例。

“`gradle:build.gradle
plugins {
id ‘org.springframework.boot’ version ‘2.4.2’
id ‘io.spring.dependency-management’ version ‘1.0.11.RELEASE’
id ‘java’
}
group = ‘com.example’
version = ‘0.0.1-SNAPSHOT’
sourceCompatibility = ’15’
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter’
i

元記事を表示

プロエンジニアの教え方を未来の私の為にメモっておく

## この記事を書いた経緯
私は現在エンジニアスクールに通っています。
プロエンジニア講師に個別で補習をしてもらい、何週間も悩んだ機能がやっと実装できました。
動いたときの喜びが今でも忘れられません。
答えをすぐに教えるような教え方ではなかったため2時間かかりましたが、とても丁寧に実装まで導いてくださいました。

(気が早いですが)自分がいつか誰かに指導する立場になったとき、この記事を見返そうと思い、投稿させていただきます。

## 質問した人
– 自分のできる限りググりつくしている。
– 今回の質問は(Java)SpringSecurityについて。登録済のId,Passを入力してもloginできない状態だった。

## 事前準備
– コードをもらっておき、予め何が問題だったか予想しておく。

## 講師の教え方

#####1. 何がしたいのか、自分の言葉で全体のコード説明させる。
– 最後まで喋らせる。口を挟まない。

#####2. 何が問題だと思うのか、自分の言葉で説明させる。

– 何でそう思うのか根拠を聞く。
– デバック等で確認したか聞く。
– 気にな

元記事を表示

STSで行うカバレッジ測定

1. Eclipseマーケットプレイスで「EclEmma Java Code Coverage」をインストールし、再起動する

![スクリーンショット 2021-01-23 12.39.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637360/909c5d0f-ff41-6a3e-de67-f99477048c51.png)

![スクリーンショット 2021-01-23 12.38.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637360/564ba713-87b3-f092-1d92-d9ef0cd254cb.png)

2. 「src/test.java」を右クリックで画像のようにJUnitを選択して実行
![スクリーンショット 2021-01-23 12.40.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

Mapについて【Java】

#目次
* [特徴](https://qiita.com/drafts#%E7%89%B9%E5%BE%B4)
* [初期化① put(key, value)](https://qiita.com/drafts#%E5%88%9D%E6%9C%9F%E5%8C%96-putkey-value)
* [初期化② put(key, value)](https://qiita.com/drafts#%E5%88%9D%E6%9C%9F%E5%8C%96-putkey-value-1)
* [要素数を返す size()](https://qiita.com/drafts#%E8%A6%81%E7%B4%A0%E6%95%B0%E3%82%92%E8%BF%94%E3%81%99-size)
* [キーを指定して値を取得する get(key)](https://qiita.com/drafts#%E3%82%AD%E3%83%BC%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97%E3

元記事を表示

SonarQube(Java)の、ルールの出典を確認したい

# Whats’?

SonarQubeで使えるJavaのルールって、SonarQube自身が提供しているのか、それとも他のOSSなどのルールを使っているのか知りたいなぁと思いまして。

# 結論

すべて、SonarQube自前のルールでした。

SpotBugs、FindSecBugs、PMD、Checkstyleで検出した問題については、インポートが可能だということです。

[Importing Third-Party Issues](https://docs.sonarqube.org/latest/analysis/external-issues/)

> SonarQube doesn’t run your external analyzers or generate reports. It only imports pre-generated reports.

[Importing SpotBugs, FindSecBugs, PMD, Checkstyle Issues Reports(※このページはもうメンテナンスされていません)](https://docs.so

元記事を表示

初心者が1から始めるJava開発-Vol.5- 繰り返し編

前回に引き続き今回はJavaの繰り返しについて書いていこうと思います。

前回の[Vol.4](https://qiita.com/soepy/items/cfaa9927042bdd36fcf7)も重要なので、初心者は要チェックです。

———————————
**Javaの初心者向けおすすめ本**
初心者が1から始めるJava開発-Vol.4- 条件分岐編

プログラムには大きく3要素あると思っていて

– 順次実行(順次)
– 条件分岐(分岐)
– 繰り返し(反復)

です。

このうち順次というのは読んで字のごとく、「順番に処理を実行する」という意味で、
Javaでは、上に書いたものから先に実行されるという一般的なルールに従います。

当然、Vol.3で紹介したメソッドやクラスは呼び出された順に実行するので、
クラス内に書かれている順ではなく、呼び出された順です。

今回は2つ目の条件分岐について紹介していきます。

———————————
**Javaの初心者向けおすすめ本**
MavenプロジェクトでSonarQubeを使ってみる

# What’s?

こちらのエントリでSonarQubeサーバーのインストール方法はわかったので、今後はSonarQubeを動かしてみましょう。

[CentOS 8にSonarQubeサーバーをインストールする](https://qiita.com/charon/items/b5e54fab02dd9aae9525)

Java(Maven)なプロジェクトで、SonarQubeのソースコード解析を動かしてみます。

# 環境

SonarQubeサーバーのバージョンは`8.6.0.39681`、SonarQubeサーバーが稼働しているサーバーのIPアドレスは`192.168.33.10`とします。

JavaやMavenのバージョンはこちら。

“`shell
$ java –version
openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubun

【Android / Java】双方向 DataBinding + Clickイベント / サンプルアプリ実装

# はじめに
実務案件で DataBinding を利用している。
なかなか難しい。そこで双方向 DataBinding を用いたサンプルアプリを作成しながら DataBinding について学んだ。

※ 今回は Java ですが、 ~~Kotlin でも同様のものを作成してみようと思っております。その時は改めて投稿します~~。
Kotlin バージョンも作成して記事にしましたのでご覧いただければ幸いです!!↓↓
[【Android / Kotlin】双方向 DataBinding + Clickイベント / サンプルアプリ実装](https://qiita.com/tkmd35/items/516283b4e43fd5ff7a7c)

## 双方向データバインディングとは(一方向との違い)

– 一方行データバインディング
– ViewModel などの中でデータを変更 → View に反映
– 双方向データバインディング
– ViewModel などの中でデータを変更 → View に反映
– ユーザが View でデータを変更 → ViewModel にデータの変

元記事を表示

Java シリアルツール性能比較

# Java シリアルツール性能比較

本ページでは主にjavaのシリアルツールの性能比較を記載します。
コードと結果の部分があります。

###使用されたのdependency

– Java原生方法
– XStream方式
– FastJson方式
– Hessian方式

### シリアルされたデータ

“`java
@Data
public class User implements Serializable {
private static final long serialVersionUID = -2564324657866843L;
private String name;
private int age;

private void writeObject(java.io.ObjectOutputStream s) throws IOException {
s.defaultWriteObject();
s.writeObject(name);
}

private void read

元記事を表示

Java リフレクションでメソッド実行

Javaでリフレクションを実行した際の備忘録
最後尾にサンプルソースを記載している

◆文字列をクラスオブジェクトに変換する
> // 文字列をクラスオブジェクトに変換する
String strClass = “imamu.reflect.Called”;
Class c = Class.forName(strClass);

◆クラス名とメソッドの取得方法
> // クラス名の取得
System.out.println(“Class name: ” + c.getName());
// メソッドの取得
for (Method m : c.getMethods()) {
boolean isFirstParam = true;
System.out.print(” ” + m.getName() + “(“);
for (Class p : m.getParameterTypes()) {
if (!isFirstParam) {
System.out.pr

元記事を表示

Java基礎 シリアライズとは

前回、ファイルオブジェクトを生成し文字を書き込んだり読み込んだりする処理を書きました。
今回は、プログラマーが作ったクラスで生成したオブジェクトを入出力する方法について書きたいと思います。

##シリアライズ
生成したインスタンスをバイト列に変換したり(**シリアライズ**)、またそのバイト列をインスタンスに戻したり(**デシリアライズ**)する仕組みです。
この仕組みによって、入出力ストリームを使用してファイルに保存したりネットワークで伝送したりできます。
シリアライズは直列化とも呼ばれます。

##オブジェクトをシリアライズ可能にする
通常のクラスをシリアライズ可能にするには、**java.io.Serializableインターフェース**を実装する必要があります。このインターフェースはマーカーインターフェースのため、オーバーライドすべきメソッドは持ちません。

下のプログラムは、PersonクラスがSerializableインターフェースを実装し、シリアライズ可能なオブジェクトにしています。

“`java:Person.java
import java.io.*;

clas

元記事を表示

Java の UUID は素晴らしい!

ユニークのキーを生成したいと思って、この記事を見つけました。

https://qiita.com/kawasima/items/6b0f47a60c9cb5ffb5c4

まさにこの記事の通りです。素晴らしい。

結論から言うと、UUID version4 が良さそうです。
UUID 以前から知ってましたが、バージョンまであるのは知りませんでした。

じゅあ、どうやってバージョンを調べるの?と調べたら、この記事

http://xawa99.blogspot.com/2013/07/UUID-Version.html

xxxxxxxx-xxxx-Vxxx-xxxx-xxxxxxxxxxxx
なるほど!

Java 8 で検証してみました。

“`java
import java.util.UUID;

public class App {
public static void main(String[] args) {
for (int i = 0; i < 10; i++

元記事を表示

OTHERカテゴリの最新記事