JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

GraphQL×Java入門 エラーハンドリング

## はじめに

前回はMutation編ということでMutationの実装例を紹介させてもらいました。

今回は、エラーハンドリングの実装例を紹介します。
ただ、JavaでGraphQLの実装してもらうときのポイントとなるところを紹介するのがメインなので、ソースコードを作り込んでいるわけではないので、実務でそのまま使用するのは避けてくださいmm
(時短で結構適当にロジックや例外処理書いてあります)

## 環境

・SpringBoot:3.3.2
・Java:17
・GraphQL:22.1

## ソースコード

[GraphQL Sample](https://github.com/kehuka11/graphql_sample)

## エラー時のステータスコード

https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md#applicationjson

GraphQLはエラー時でも200コード返す仕様みたい。

ここに書いてあるように、ステータスコードは200固定が推奨なの

元記事を表示

GraphQL×Java入門 Mutation編

## はじめに
前回は、JavaでのQueryの実装例を紹介したので、今回はMutationを紹介します。
ただ、JavaでGraphQLの実装してもらうときのポイントとなるところを紹介するのがメインなので、ソースコードを作り込んでいるわけではないので、実務でそのまま使用するのは避けてくださいmm
(時短で結構適当にロジックや例外処理書いてあります)

## 環境

・SpringBoot:3.3.2
・Java:17
・GraphQL:22.1

## ソースコード

[GraphQL Sample](https://github.com/kehuka11/graphql_sample)

## 実装

### 1データ登録

**スキーマ**

~~~sql
type Mutation {
registerBook(title: String!, author: AuthorInput!): Book!
}

type Book {
id: ID!
title: String!
author: Author
}

input AuthorInput

元記事を表示

GraphQL×Java入門 Query編

## はじめに

前回は基礎編ということでざっと用語紹介させてもらいました。

今回から、実際の実装例を紹介しますー。
ただ、JavaでGraphQLの実装してもらうときのポイントとなるところを紹介するのがメインなので、ソースコードを作り込んでいるわけではないので、実務でそのまま使用するのは避けてくださいmm
(時短で結構適当にロジックや例外処理書いてあります)

## 環境

・SpringBoot:3.3.2
・Java:17
・GraphQL:22.1

## ソースコード

[GraphQL Sample](https://github.com/kehuka11/graphql_sample)

## とりあえず、データ取得してみる

### スキーマ
~~~sql
type Query {
searchBookById(id: ID!): Book
}

type Book {
id: ID!
title: String!
author: Author
}

type Author {
id: ID!
firstName: St

元記事を表示

GraphQL×Java入門 基礎編

## はじめに

以下のような方達を対象に記事書いてます。

・GraphQLを初めて触る方

・とりあえずGraphQLで作成されたAPIを動かして動作させてみたい方

## 環境

仕事でGraphQLを検討することになったので、サンプルを作成しつつ、気になったところを検証してみようと思います。

・SpringBoot:3.3.2
・Java:17
・GraphQL:22.1

## ソースコード

[GraphQL Sample](https://github.com/kehuka11/graphql_sample)

GraphQLの検証のためのサンプルなので、動作するためだけに書いてあるところが多いので、悪しからず

## GraphQLとは

めっちゃざっくりいうと、
APIを開発するためのクエリ言語であり、REST APIより、データ取得効率を上げたり、柔軟性が上がることでクライアント側とコミュニケーションコストも減るなどを特徴に持ったFacebookによって開発されたクエリ言語とサーバーサイドのランタイム。
スキーマという構造を定義してQueryでデータを取得できた

元記事を表示

Java Gold(1Z0-816 Java SE 11)合格体験記

# はじめに
Java Goldを取得したため、その備忘録を残しておきます。

私のスペックは以下です。

– 2023年4月入社(当時新卒2年目)
– 情報系大学院卒業
– 業務でJavaを使用中
– Java Silver合格済み(Java Goldの受験資格になっています)

業務でJavaを使っているため、Javaの知識の定着を兼ねて試験を受けてみるかという気持ちでした。Java Silverは2024年8月に取得しており、折角なのでJava Goldも受けてみようと思い立ちました。

# 勉強方法

定番の黒本を周回しました。

以下のような流れで勉強しました。

1. 1章分問題を解く
1. 正解・不正解に関わらず、問題の解説を読む
1. 解説を読んでイメージ付かない場合は、サンプルコードを写経して動かし理解を深める
1.

元記事を表示

フレームワークを作りながら、ServiceLoaderとアノテーションプロセッサーを使ってみました

## はじめに
現在、ドメインごとに依存関係を分離し、命名規則を強力に検査するDIフレームワークを作成しています。このフレームワークを開発する中で、`ServiceLoader` と `Annotation Processor` を使用してみました。そこで、これらが何であるか、そしてどのように使用したかについて書いてみようと思います。

– 韓国人として、日本語とコンピュータの勉強を同時に行うために、ここに文章を書いています
– 翻訳ツールの助けを借りて書いた文章なので、誤りがあるかもしれません

## 状況
現在、私は命名規則を厳格に管理しています。

クラス名がルートドメインではなく、サブドメインに属する場合、必ず守るべき命名規則を定義しました。

基本的には以下のような命名規則が適用されます。

“`java
“Service”, “Repository”, “Controller”, “Handler”, “Manager”
“`

これにより、次のように記述できます。

“`java
import org.haroya.annotation.Container;

元記事を表示

EchoAPI for IntelliJ IDEA: Java開発者のためのAPI管理を強化するプラグイン

# EchoAPI for IntelliJ IDEA: Java開発者のためのAPI管理を強化するプラグイン

現代のソフトウェア開発において、API管理はますます重要性を増しています。Java開発者にとって、強力なAPI管理プラグインは開発効率を大幅に向上させ、Postmanのような重いデスクトップツールをダウンロードすることなく、ワークフローを簡素化できます。ここでは、Java開発者向けに特別に設計されたツール—EchoAPI for IntelliJ IDEAをご紹介します。

## EchoAPI for IntelliJ IDEAの紹介

[EchoAPI](https://www.echoapi.com)は、API設計、デバッグ、そして自動テストをサポートする多機能なAPI管理ツールです。特にIntelliJ IDEA用に設計されたプラグインとして、開発者の環境にシームレスに統合され、Java開発者の生産性を飛躍的に向上させます。

![EchoAPI for IntelliJ IDEA.png](https://assets.echoapi.com/upload/use

元記事を表示

Javaの演算子を勉強してみました

## はじめに
現在、私が進行しているJavaの勉強会でまとめた内容です。

内容に不正確な点があれば、ご指摘いただけるとありがたいです。

https://github.com/whiteship/live-study/issues/3

– 韓国人として、日本語とコンピュータの勉強を同時に行うために、ここに文章を書いています
– 翻訳ツールの助けを借りて書いた文章なので、誤りがあるかもしれません

# 演算子
– 算術演算子
– ビット演算子
– 関係演算子
– 論理演算子
– instanceof
– 代入(=)演算子
– アロー(->)演算子
– 三項演算子
– 演算子の優先順位
– Java 13. switch演算子

## Javaで提供される演算子
演算子と被演算子とは?
– 演算子: 演算に使用される記号(+, – など)
– 被演算子: 演算に使用される対象(1, 2, a など)

**ほとんどの演算**はプリミティブ型でのみ使用可能です。

– Stringクラスは除く

“`java
String str1 = “Hello, “;
String s

元記事を表示

すべてのモニターのスクリーンショットを1つのファイルに保存したい

マルチモニター環境で、すべてのモニターのスクリーンショットを取得し、1つのファイルscreenshot.pngに保存するサンプルです。

“`java
public void screenShot() throws AWTException, IOException {
Rectangle rectangle = new Rectangle();
for (GraphicsDevice graphicsDevice : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
for (GraphicsConfiguration graphicsConfiguration : graphicsDevice.getConfigurations()) {
rectangle = rectangle.union(graphicsConfiguration.getBounds());
}
}

Robot rob

元記事を表示

Javaの開発環境を構築

Javaの学習を始めたのでアウトプット目的で書き記していきます。

使用するフレームワークはSpring Boot、
開発環境はIntekkiJ Ideaを使用します。

## Spring Bootについての説明から。
一言でいうならば、**設定が難しいSpringをもっと手軽に使えるようにしたもの**です。

Springとは、 Webアプリケーションを作るためのフレームワークで広く使われています。
しかし、細かい設定が必要だったり、ウェブサーバーの準備をしたりなど自由度が高い反面、初心者には難しいです。

対して、Spring Bootは雛形があり、初期設定を自動生成してくれたり、データベースやウェサーバーの設定が揃っていたりと初心者でも簡単に開発を始めることができます。

以上にをまとめると、
Spring Bootは初心者や小規模プロジェクト向け
Springha高度なカスタマイズが必要な大規模プロジェクト向け

Spring BootはSpringの利点を継承しつつ、初心者でも簡単に開発を始められるが、自由度はSpringには劣る。

ということになります。

## In

元記事を表示

SDKMANのJDKをSystem JDKとしてmacOSに誤認させる

# なぜ誤認させたい?

– SDKMANをセットアップすると`JAVA_HOME`をSDKMANがよしなにしてくれるようなる
– `/usr/bin/java`, `/usr/libexec/java_home`などが変わらずSystem JDKの場所である`/Library/Java/JavaVirtualMachines`配下のJDKを参照する
– XcodeのScriptPhaseなど**JAVA_HOMEを見ず、強制的にSystem JDKを参照する**ライブラリやプラグイン類がいる
– どうにかしてPCにinstallするJDKをSDKMANだけに寄せたいのでSDKMANでinstallしたJDKをSystem JDKに誤認させたい

# SDKMAN以外のJDKはどうなっているか

– システムのJDKは`/Library/Java/JavaVirtualMachines`にinstallもしくはsymbolic linkを貼ったものであるパターンが多い
– [jdk.java.net](https://jdk.java.net/)からinstallする場合、tarフ

元記事を表示

特定のFeignClientに専用のErrorDecoderを利用させる

# 背景
SpringBootでAPIを使用しようと思ったらRestTemplateを使うと思いますが、RestTemplateはメンテナンスモードに入ってしまい、他のClientに変えざるおえない人も多数だと思います。

私もあるプロジェクトで変える必要発生し、FeignClientに変更しました。

ここで特定のエラー時はFeignExceptionを返すのではなく、自作例外を返却したい時がありました。

# 環境
Java:17
Gradle:8.5
SpringBoot:3.1.6
spring-cloud-starter-openfeign:4.0.4

# 最初にやってみたこと
ErrorDecoderを自作しそれをBean化させて特定のFeignClientに装着させれば可能です。
※基本的なFeignClientの使い方は割愛します
“`Java:CustomDecoder.java
@RequiredArgsConstructor
public class CustomDecoder implements ErrorDecoder {
private fin

元記事を表示

Spring Security(認可設定)の備忘録

# はじめに
解体新書という書籍にて11章のSpring セキュリティの内容について学習中に
画面表示の認可(権限による画面表示の切り替え)が実現不能でした。
一般ユーザでも管理者限定にしているボタンが出現。。
ソースとしてはHTMLに記載を追加するのみでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1041138/6aa665e6-1aad-288a-cdca-3336cff82dfb.png)

# ■menu.html
“`java


元記事を表示

Spring Boot 3 x Spring Security 6 でログイン画面を複数作成する際のSecurityFilterChainの書き方

## 概要

ユーザー向け画面と管理画面の2つを作成したいケースがあると思います。
その際に、SecurityFilterChainの書き方で迷ったので備忘します。
SpringBoot3(SpringSecurity6)の記事が少なかった点と、
SpringBoot2の時と比べて差異があったため、記事にしました。

## まとめ

* `SecurityFilterChain` で `securityMatcher` を利用する
* `Order` の優先順位に注意する。

## サンプルコード

ユーザー向け画面のSecurityFilterChain。

“`java
public class UserSecurityConfig {

@Bean
@Order(1)
public SecurityFilterChain userSecurityFilterChain(HttpSecurity http) throws Exception {

// URL認可
http.securityMatcher(“/user/

元記事を表示

Spring Modulithでモジュラモノリスライクな依存関係のコントロールを試してみた

# Spring Modulithとは
> Spring Modulith は、Spring Boot を使用してドメイン駆動型のモジュール型アプリケーションを構築するための独自のツールキットです。Spring Boot がアプリケーションの技術的な配置について独自の見解を持っているのと同じように、Spring Modulith は、アプリを関数に構造化する方法について独自の見解を実装し、個々の論理部分が相互にやり取りできるようにします。その結果、Spring Modulith を使用すると、開発者は更新が容易なアプリケーションを構築して、時間の経過とともに変化するビジネス要件に対応できるようになります。

https://spring.pleiades.io/spring-modulith/reference/

# 本記事の内容
Spring Modulith の依存関係をコントロールする機能を試してみた記録です。
先日参加したJJUG CCC 2024 Fallで紹介されていて興味が湧き試してみました◎

https://www.docswell.com/s/Simplex/ZJ

元記事を表示

【Spring Boot入門】#3 バリデーション(入力チェック)

## はじめに
自身の知識のアウトプットも兼ねて、新人研修用に作成した記事となります。Spring Bootを学び始めた方を対象とした内容になっています。

登録画面の表示~登録機能の作成については、前回の記事を参照ください。

https://qiita.com/ioaio/items/ba78d173bdc0e283a34f

## 概要
前回、ユーザーが入力した情報をデータベースに登録するところまで確認しました。

しかし、今のままではフォームから送られてくるデータが適正なものかのチェックが行われていないません。

例えば、従業員数に数字以外の値を登録しようとした場合を見てみましょう。DB上は従業員数を数値型で管理している為、この状態で登録しようとすると例外がスローされます。(`java.lang.NumberFormatException` はアプリケーションが文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合にスローされます。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

【Spring Boot入門】#2 登録機能を作成する

## はじめに
自身の知識のアウトプットも兼ねて、新人研修用に作成した記事となります。Spring Bootを学び始めた方を対象とした内容になっています。

新規登録画面の作成と表示については、前回の記事を参照ください。

https://qiita.com/ioaio/items/b60055f5b334e8e313de

## 概要
企業情報の登録機能を作成していきます。
クライアントから渡ってきた企業情報をDBに追加し、最後に登録完了画面を返す機能を作成します。

#### 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917178/f199291d-ebd7-3c46-8e95-28ca693a0d3c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917178/aae161e8-f06c-27da-8c45-fe7edea0d97a.png)

![

元記事を表示

WireMockでさまざまな障害パターンをシミュレーションする

# はじめに

どうも、来年から社会人エンジニアになるNMSです。

モックするAPIの障害が起因の例外を正しく処理できるかテストしたいときに、WireMockを使えば簡単に実現できたので、自分用のメモとして記録しておきたいと思います。

以下は、WireMockをstandalone JARで実行し、スタブをHTTP経由で設定する場合のJSONで例を示しています。
スタブの設定方法自体は記載しないので、そこも知りたい方は[公式ドキュメント](https://wiremock.org/docs/stubbing/)、または他の方の記事をご覧ください。

# 障害パターン

## レスポンスの遅延・タイムアウト

`fixedDelayMilliseconds`に遅延させたいミリ秒数を設定するだけ。

“`json
{
“request”: {
“method”: “GET”,
“url”: “/timeout”
},
“response”: {
“status”: 200,
“fixedDelay

元記事を表示

JavalinとThymeleafでWebアプリケーションを構築する方法

# 概要

この記事では、JavalinとThymeleafを使用して簡単なWebアプリケーションを構築する方法について解説します。Javalinはシンプルで軽量なJava用Webフレームワークで、ThymeleafはJavaベースのテンプレートエンジンとして、HTMLファイル内で変数をレンダリングするのに役立ちます。

# 必要なファイルと設定

以下の4つのファイルを使用します:

– `pom.xml`: Mavenのプロジェクト設定ファイル
– `App.java`: Javalinアプリケーションのエントリーポイント
– `ThymeleafRenderer.java`: JavalinでThymeleafを設定するためのレンダラー
– `index.html`: レンダリングするHTMLテンプレート

## 1. `pom.xml`の設定

まず、プロジェクトの依存関係を定義するために`pom.xml`ファイルを設定します。Thymeleaf、Javalin、その他の必要なライブラリを追加します。

“`xml StringをCharにしたら処理速度が倍になった

Stringを甘く見ていてめっちゃハマってしまったので戒めに残しておく
この問題 https://atcoder.jp/contests/abc375/tasks/abc375_c

## 解答コード

“` diff_kotlin
fun main(){
val n = readln().toInt()
– var pre: MutableList> = mutableListOf()
– var next: Array> = Array(n){Array(n){“”}}
+ var pre: MutableList> = mutableListOf()
+ var next: Array> = Array(n){Array(n){‘.’}}
repeat(n) {
pre.add(
– (readln().map { it.toString() })
+ (readln().toLi

元記事を表示

OTHERカテゴリの最新記事