JAVA関連のことを調べてみた2020年07月26日

JAVA関連のことを調べてみた2020年07月26日

Jacksonで良い感じに整形してシリアライズする

JavaでJSONにシリアライズしたいときはJSON-Bだと力不足なのでJacksonを使う事が多いのだけど、いつも書き方忘れるのでメモ。

# 整形せずにシリアライズする

データ交換用に整形せずにシリアライズするパターン。通常はこれ。

“`java
var item = Map.of(“parent”, Map.of(“child”, List.of(“a”, “b”, “c”)));
var json = new ObjectMapper().writeValueAsString(item);
“`

結果

“`json
{“parent”:{“child”:[“a”,”b”,”c”]}}
“`

# 整形してフォーマットを綺麗にしたい場合 その1

画面出力や設定ファイル用にフォーマットを整えたい場合. INDENT_OUTPUTを使う

“`java
var item = Map.of(“parent”, Map.of(“child”, List.of(“a”, “b”, “c”)));

var mapper = new ObjectMapper();
map

元記事を表示

JavaからVB.NETへ ―書き方対照メモ―

# この記事について
## 作成の経緯
新人研修で3ヶ月間Javaをやってきたけれども、配属先部署で使う言語はVisual Basic .NETだったので新しく学ぶ必要が生じた。
しかし、「JavaからVB.NETへ移行」というケースはそんなにないのか(今ならC#あたりが普通…?)、文法の比較などを細かくしているサイトが見つからなかったため、自分で書いてみることにした。

## 対象者・目的
– Javaの書き方やプログラミングの諸概念は一通り理解している
– これからVB.NETでもプログラムを書けるようになりたい

という人(まあ自分と数名の同期だけれど)にJavaとVB.NETの比較対象リファレンスを提供する。

## 環境
– Windows 10
– Visual Studio 2019
– .NET Framework 4.7.2

といっても、環境に依存するようなコードはほぼないはず。

## 記述上の注意
– Visual Basic .NET(VB.NET)のことは、以下単に「VB」と呼ぶ。
– 同じセクションにあるJavaとVBのコードは、基本的に同じ処理になるよう

元記事を表示

Spring Boot で TextWebSocketHandler を継承したクラスで Autowired したフィールドが NULL になる

#1.環境

Spring Boot:v2.2.5

#2.困ったこと

Spring Boot でチャット機能を作成するため、WebSocket を利用。

TextWebSocketHandler を継承したクラスを作成し、その中で DB にアクセスするためにリポジトリクラスを Autowired しようとしたが、フィールドに宣言したリポジトリクラスの変数が NULL。

以下が TextWebSocketHandler を継承した WebSocketChatEndpoint クラス。

“`java:WebSocketChatEndpoint.java
@ServerEndpoint(“/api/chat”)
@Component
public class WebSocketChatEndpoint extends TextWebSocketHandler {

@Autowired
private ChatRepository chatRepository; //NULL

@OnOpen
public void onOpen(Session session

元記事を表示

javaでM-SOLUTIONS プロコンオープン 2020を解く

M-SOLUTIONS プロコンオープン 2020お疲れ様でした!
[公式ページ](https://atcoder.jp/contests/m-solutions2020)

今回の自分の書いたコードは[こちら](https://github.com/ko-flavor/atcoder-java/tree/master/atcoder/src/abc/msolutions2020)
結果はA-DまでACできました。なんとか4問ACでした、問題Dに苦戦しました・・・

以下簡単に解説します。

##[問題A](https://atcoder.jp/contests/m-solutions2020/tasks/m_solutions2020_a)

特定の点数の時に何級という条件を求める問題。
そのままif文でもいいですが、よく見ると200点区切りになっているので、
点数を200で割った余りを10から引くと簡単に求められます。

##[問題B](https://atcoder.jp/contests/m-solutions2020/tasks/m_solutions2020_b)

数字が

元記事を表示

Google Cloud Storage上にMavenインハウスリポジトリを構築する

## はじめに
[Google Cloud Storage](https://cloud.google.com/storage?hl=ja) (以下GCS)上にMavenインハウスリポジトリを構築して利用する方法のまとめです。
ドキュメントに書いてあることの二番煎じ的な感じもしますが、インハウスリポジトリの作り方や、作った後のjarファイルの転送方法から使用方法まで総合的にまとめてある記事が見当たらなかったので、備忘録として残しておきます。

ちなみに自分はGradleユーザなので、Gradleを使った場合の方法についてまとめています。

## 試してみるといいかもな人
* **開発/運用で既にGCPを使っている人**
GCSのバケット作って権限の設定とかするだけでよいので簡単に導入できます!

* **Gitのサブモジュールを使ったGradleのサブプロジェクト構成に疲れた人**
Mavenセントラルからjarファイルを引っ張ってくるのと同じ感覚で使えるため楽です!

* **既に [Sonatype Nexus](https://www.sonatype.com/nexus-rep

元記事を表示

javaで席替え

#Javaで男性12人と女性8人の席替え

##実現したいこと

・配置はランダム
・横一列のどこかに女性一人以上を配置したい
・目の悪い人が入れば前に固定
・分かりやすいコード

##結果
シャッフルされたリストから、get()で取り出す。
System〜printlnで、座席に見えるようにした

・配置はランダム
 →リストをCollections.shuffle()で毎回結果が変わる
・横一列のどこかに女性一人以上を配置したい
 →あらかじめ、女性が来るのか男性がくるのか、配置される場所を決めた
・目の悪い人の固定
 →リストから外し、”〜get()”のとこを消して固定する人の名前にする

※プログラムを実行すると一瞬で終わるのでちょっと退屈
※一度隣同士になった人を避けるなどは出来てない

##コード

“`

import java.util.ArrayList;
import java.util.Collections;

public class Sekigae4 {
public static void main(String[] args) {

元記事を表示

「言語仕様上そんなこと出来るんだ」から始めるデザインパターン

# 始めに
GoFのデザインパターンについて,様々な方が記事にされており,私もいつも勉強させて頂いております.しかし一方で,それらの記事は「こうクラス設計をすることでこんなメリットがあります」,「従来のやり方はこういった問題があります」といったハイレベルな方を対象とした,前提をある程度共有できる方に向けた記事のような印象を受け,そもそも私のような初学者が分からない「言語仕様上,こんな書き方が出来ます」,「この様にクラス設計をすると,プログラムはこう動きます」といったような,「まず何が出来るのか」についてフォーカスしている記事は見当たらないような気がします.

そこで,今回私は[Java言語で学ぶデザインパターン](https://www.hyuki.com/dp/)を題材に,まず「Javaは言語仕様上,こんなことが出来ます」という観点から,デザインパターンを見ていこうと思います.

話が逸れるかもしれませんが,ここで扱う題材は基本的にはJavaのため,他言語では既に仕様として出来るもの(例えばPythonの` __iter__` など)や,逆に他言語では出来ないor出来るにしてもかなり

元記事を表示

Windows + JavaのUNICODE ZIPへの対応状況をざっと確認

# 概要
マルチ プラットフォームに向け仕様改定があったはずなのに、未だに思ったほど普及が進んでいない様に思える、UNICODE ZIP。コロナの禍中で在宅ワークも増えて、ZIPファイルでの情報交換がより増えているはずで、UNICODE ZIPの必要性はより高まっていると思う。

ふとmacOS周りの事情やマルチプラット フォームのアーカイバが気になっり、
そもそも **JavaのUNICODE ZIPの対応状況はどうなのだろう?** と思い、軽く調べてみた。

# 結論
* Java 7 以降はUNICODE ZIPの圧縮に対応している。
* JDK 6 で ビルドしたプログラムでもJRE 7 以降で実行すれば、UNICODE ZIPが作れる。
targetオプションなどで 7以上を対象にするのが望ましそう
* Java 6 以前は非対応。Apach Commons Compressで対応可能。
* WEBアプリでのZIPの文字化け対策は、適切にUNICODE ZIPをしっかり使うこと。
* WEBアプリはマルチ プラットフォームがそもそもの本懐。
* WEB

元記事を表示

未経験がJava Silver 11を取得するためにした学習法

#はじめに
エンジニア志望の著者は、就活の過程で著者はスキルも何もなく、現在のコロナ下での就職は難しいとのアドバイスをいただき、ひとつずつ身に着けられるスキルなどをできるところから学んでいこうとの思いで、まずは教えていただいたJava Silverから取得しようと考えました。

そして、つい先日Java Silver 11の資格を取得しましたので、取得までの学習法を共有したいと思います。

結果としては**89%(合格正答率63%)**で合格できました:relaxed:

#対象の方
・様々な理由でJava Silverを取得しようとしている方

#そもそもJava SE認定資格とは?
オラクル社が実施しているJavaプログラマ向けの資格です。
レベルとして**「Bronze」「Silver」「Gold」**があり、各レベルごとに現在のスキルのレベルの証明となります。

| レベル|概要|
|:—-:|:—-:|
|Bronze|Java言語を使用したオブジェクト指向プログラミングの基本的な知識を有するレベル|
|**Silver**|**Javaアプリケーション開発に必要とさ

元記事を表示

Springで自作Validation

#背景
Formにアノテーションをつける以外(二重チェック等)のバリデーションの方法をメモしておきます。今回はBean ValidationではなくSpring Validatorを使用します。

#方法
“`java:SessionForm
public class SessionForm {

private CheckForm checkForm;
//エラー出力用変数
private String error1;

private String error2;
//セッター等省略

“`

“`java:CheckValidation
@Component
//インターフェース実装
public class CheckValidation implements Validator {
//Checkにヘルパーを使う場合は注入
@Autowired
Helper helper;

@Override
public boolean supp

元記事を表示

VPSにWebApplicationServer(Java)を構築する

Serverのお勉強のためにWebServerを構築し、JavaApplicationを実行するところまでやってみた。

# 目次
1. 動作環境
2. やること
3. 構築手順
4. 参考サイト

# 1. 動作環境
– Cent OS7

# 2. やること
調べたところ、以下をすれば、とりあえず動かすことはできるみたい。

– Javaの実行環境構築
– サーブレットコンテナの準備
– WebServerの構築
– Javaアプリケーションの配置

# 3. 構築手順
### Javaの実行環境構築
サーバー上でJava実行を実行するために、JDKをインストールする。
以下のサイトが分かりやすかった。
■参考: [CentOS 7 に Tomcat 9 を入れてみた](https://www.kagoya.jp/cloud/vps/tutorial/03.html)

サーバーで以下のコマンドを実行してインストール(JDK8)。

“`
# yum install java-1.8.0-openjdk-devel.x86_64
“`

(他のJDKを検索したい場合は、以下

元記事を表示

JavaでJsonをPOSTする〜HttpURLConnection〜

# 概要
JavaでJSONをHTTP POSTする方法をまとめた記事です

必要最低限の書き方のみまとめています。

#前提

簡略化のため、JSON形式の文字列を用意しました。
JSONをjavaに変換する方法などは他の記事を参考にして下さい。

呼び出し元がこのクラスをインスタンス化し、execute()メソッドを呼び出すことを想定しています。

# 手順
手順は以下の通りです
1.HttpURLConnectionで接続するための設定をする
2.接続を確立する
3.リクエスとボディに書き込みを行う
4.レスポンスを受け取る
5.接続を切断する

# JavaでHTTP通信する方法
“`java:Sample.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;

p

元記事を表示

書籍紹介:Spring Boot 初心者におすすめの参考書!

※記事の内容は2020年7月25日執筆時点のものです
##書籍情報
今日はSpring Boot初心者におすすめの書籍を紹介したいと思います。
私自身も業務でSpring Bootを初めて使う際に大変お世話になりました。
それが↓↓こちら↓↓の書籍です。

[「【後悔しないための入門書】Spring解体新書」田村達也 (著) ](https://www.amazon.co.jp/【後悔しないための入門書】Spring解体新書-Boot2で実際に作って学べる!Spring-Security、Spring-JDBC、Spring-MyBatisなど多数解説!-ebook/dp/B07H6XLXD7)

これからこの書籍のおすすめポイントをいくつかご紹介したいと思います。

##おすすめ読者像
 この書籍はJavaでのオブジェクト指向プログラミングなど基本は理解しているけれど、Spring Bootなどを使ったフレームワーク開発は未経験という方におすすめです。
 また、時間のない方、まずはSpringについてざっくりと概要を知りたい方にもおすすめです。逆に、Springについて深く理解したい

元記事を表示

月度を用いて範囲の判定をしたい

# 問題点
月度のデータをもっているときに9月以前で取得したいが、
1,2,3月は次の年のデータなので含めたくないということがあると思います。
そのときに簡易的に取り除く方法の例をメモします。

# どうやるか
以下のように比較するそれぞれの月度を変換して、
変換後の値を用いて判定することで解決できます。

“`java

(月度 + 8) % 12
“`
例えば、9月度以前のデータを取得する際は、
取得元データの月度変換値<=基準となる月度変換値とすることで、 4,5,6,7,8,9月だけが取得できるようになります。 なぜなら変換後の値が以下のようになるためです。 9月の変換後の値は「5」なので、その値以下である4~9月が取得できます。 | 月度 |変換後の値 | |:----|----------:| | 1 |9| | 2 | 10 | | 3 | 11 | | 4 | 0 | | 5 | 1 | | 6 | 2| | 7 | 3 | | 8

元記事を表示

作って学ぶ Spring Boot アプリケーション (1) -準備編-

#はじめに

現在必要に迫られて英語の勉強をしており、せっかくなら勉強も兼ねて自分にあった学習記録サービスを自分で作ってみよう、と考えてこの記事を書いています。
今回はSpring Bootアプリケーションを作りながら学んでいくというスタンスで開発を進めていきます。
複数回に分けて記事にする予定です。

#前提
必須
– Javaの基本的な知識
– Javaの開発環境
– 基本的なSpringの知識(大体の雰囲気でOK)

あればGood
– Mavenの基本的な知識
– webアプリケーションの入門レベルの知識
– h2データベースの基礎知識
– lombokの使い方

全ての知識がほぼ0の状態から始めます。
よって、上記の初歩的な知識のみを持っている状態から進めていきます。

#環境
開発言語:Java8
フレームワーク:Spring(Springを学ぶのが目的のため確定)
データベース:H2(なんとなく)
ビルドツール:Maven(なんかよく分からんくても大丈夫)
開発環境:IntelliJ(お好きな開発環境でどうぞ)

#要件定義
今回は学習記録システムを開発します。

##

元記事を表示

作って学ぶ Spring Boot アプリケーション(2) -開発編-

#はじめに

この記事は[作って学ぶ Spring Boot アプリケーション (1) -準備編-](https://qiita.com/sgr0416st/items/94a612a27c2f90260f17)の続きです。
こちらを確認していない方はまずご確認ください。
前回はSpring Bootアプリケーションの開発準備を整えてきました。
今回から実際にアプリケーションを開発していきます。

#要件
前回も書きましたが、改めてここに示しておきます。
###### データベース
学習教材と学習記録をデータとして保持して、それぞれ下記の要素を持っているものとします。

– 教材テーブル(Subject)
– 項目ID(Long)
– 学習項目(String)
– タイプ(教科等)(String)
– 学習記録テーブル(Record)
– 記録ID(Long)
– 日付(Date)
– 項目(Subject)
– 時間(Double)
– 備考(String)

######要件
以下の操作ができるようにします。

– 項

元記事を表示

SpringBoot アプリケーションをAWSEC2へデプロイ

Gradleを用いてSpringBootアプリケーションを作成しました。
これをAWS EC2へデプロイする手順について書きました。

#実行可能jarを作成

gradleのbootJarタスクで実行可能jarをつくる
参考:https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/gradle-plugin/reference/html/#packaging-executable-and-normal

“`build.gradle
bootJar {
launchScript()
}
“`

その後コマンドラインで

“`
$ gradle bootJar
“`
実行すると ./build/libs/にjarファイルが作成される

#このjarファイルをEC2へ転送

今回作成されたjarファイル名はWebToDoStarter-0.0.1-SNAPSHOT.jarとし、Desktopに置かれているとする

sftpを用いてこのファイルをEC2へ転送

“`
$ sftp -i AWSキーのパス ec2-user

元記事を表示

QuarkusでMultipart Requestの文字化け対策

ちょっと嵌ったのでメモ。

# TL;DR

これで文字化けが直る

“`xml

io.quarkus
quarkus-undertow

“`

“`java
@Provider
public class ContentTypeSetterPreProcessorInterceptor implements ContainerRequestFilter {
private @Context HttpServletRequest request;

@Override
public void filter(ContainerRequestContext requestContext) {
request.setAttribute(InputPart.DEFAULT_CHARSET_PROPERTY, StandardCharsets.UTF_8.name());
}
}
“`

# 背

元記事を表示

JavaはPDF文書に形状を描画します

PDFドキュメントの編集プロセスでは、ドキュメントにポリゴン、長方形、楕円などのグラフィックスを追加する必要がある場合があります。Free Spire.PDF for Javaは、Javaコードを使用してPDFドキュメントに図形を描画するのに役立ちます、形状の縁の色と塗りつぶしの色を設定します。

**JARパッケージのインポート**
**方法1:**[Free Spire.PDF for Java](https://www.e-iceblue.com/Download/pdf-for-java-free.html)をダウンロードして解凍し、jarパッケージをlibフォルダーに依存関係としてJavaアプリケーションに直接インポートします。

**方法2:**Mavenリポジトリからjarパッケージをインストールし、pom.xmlファイルのコードを次のように構成します。

“`java


com.e-iceblue
e-iceblue
h

元記事を表示

【Java】Google Custom Search APIで画像を取得する

#必要なもの
・APIキー
・検索エンジンID
どちらもGoogle Custom Search APIを有効化する過程で取得できます。

#参考サイト
APIキーと検索エンジンID取得はこちらの記事が参考になりました。
[Custom Search APIを使ってGoogle検索結果を取得する](https://qiita.com/zak_y/items/42ca0f1ea14f7046108c)

画像検索についてはこちら。
[Google Custom Search APIを使って画像収集](https://qiita.com/onlyzs/items/c56fb76ce43e45c12339)

#ソースコード
検索結果から画像を10枚ダウンロードします。
保存先はダウンロードフォルダに指定しました。

“`java:CustomSearch.java
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import jav

元記事を表示

OTHERカテゴリの最新記事