20210127のJavaに関する記事は7件です。

【Java(Spring Boot)】@RequestBodyとは

プログラミング勉強日記

2021年1月27日
Spring Bootを使っていると以下のようなエラーが出た。調べてみると、コントローラメソッドの引数の中で@Requestbodyが2回使用しているのが原因だった。メソッドごとに1つの@RequestBodyしか使えないのでエラーが出るみたいだった。

エラー内容
I/O error while reading input message; nested exception is java.io.IOException: Stream closed

 正直、コードを書いていてSpring Bootを使ってpostの処理をする場合には@RequestBodyを付けるみたいな感じでちゃんと理解してなかった。なので、今日は@RequestBodyについて理解する。

@RequestBodyとは

 ユーザから投稿(POST)されたデータを受け取るSpring Bootアプリが、投稿を受け取る作業のために@RequestBodyをつける。なので、@RequestBodyは取扱説明書みたいなもので、投稿された内容を受け取る際の取り扱い方法を指定している。@RequestBodyを付けることで、json形式で受け取る。
 @RequestBodyのついた内容を受け取っているのはSpringbootAplication本体である。

参考文献

入力メッセージの読み取り中にI / Oエラーが発生しました。ネストされた例外はjava.io.IOExceptionです:ストリームが閉じられました

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

spring-kafkaのKafkaListenerでtopicsなどをメソッドやプロパティ経由で指定

spring-kafkaのKafkaListenertopicsなどは基本的にはプロパティで指定するが動的にメソッドやプロパティ経由で指定したい場合がある。その場合beanRefと組み合わせて実現する。

@Component
public class SampleConsumer {
    public String getMyTopic() {
        return "mytopic3";
    }

//  public String myTopic = "mytopic3";

    @KafkaListener(topics = "#{sample.myTopic}", beanRef = "sample")
    public void processMessage(

beanRefにはこのbean自身を指す名前をつける(デフォルトは__listener)。これでSpELでbeanを参照可能になるので、メソッドやプロパティが呼べる。上記例は#{sample.myTopic}getMyTopicを呼んでいる。コメントアウトしているmyTopicプロパティも使用可能。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WindowsPC内のJavaのバージョン変更

仕事の関係でJava12が入っていたPCにJava8を入れることになったので、作業備忘録。

ダウンロードとインストール

 これは分かりやすい記事がたくさんあるので、他の記事を参考にしてください。
 必ずJDKとJREの両方をダウンロードしてください

JREとJDKのシステム環境変数登録

 【ユーザーの環境変数】に以下の内容を登録。
  変数:JAVA_HOME
   値:JDKのディレクトリ
     →下の図の例だと「C:\Program Files\Java\jdk1.8.0_281」
   ※変更前のものは変数から消すか上記を上書きしてください
image.png
【システム環境変数】の【Path】内にJREのbinディレクトリのパス
  →下の図の例だと「C:\Program Files\Java\jre1.8.0_281\bin」を登録
 ※変更前のものは消すか上記を上書きしてください
image.png

正しく変更されているかの確認

 ・「ウィンドウズキー」+「R」を押して「cmd」と打ってコマンドプロンプトを立ち上げる。
image.png
 ・コマンドで「java -version」と「javac -version」と打って表示されるバージョンが今回ダウンロードしたバージョンと同じだったらOK!
  ※「java -version」ではPCが採用しているJREバージョン、「javac -version」ではPCが採用しているJDKバージョンが表示されます。
  ※もしこれらが正しく表示されていない場合は、環境変数でのディレクトリ指定に誤りが無いか確認してください。

以上、自分では滅多にやらないJavaのバージョン変更に関する備忘録でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java Wordをイメージに変換

今回はSpire.Doc for Javaを使ってWordをイメージに変換する、そして、イメージの解像度を設定する方法を紹介します。簡単なので、もしお役に立てば幸いです。

下準備

1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。

f:id:lendoris:20210127155151p:plain

2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.doc.jarを参照に追加してください。

f:id:lendoris:20210120151914p:plain

コード

import com.spire.doc.Document;
import com.spire.doc.documents.ImageType;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class SetImageResolution {
    public static void main(String[] args) throws Exception {
        //Document objectを作成します。
        Document doc = new Document();
        //Wordをロードします。
        doc.loadFromFile("Example.docx");

        //イメージに変換して解像度を設定します。
        BufferedImage[] images = doc.saveToImages(0, doc.getPageCount(), ImageType.Bitmap, 500, 500);

        int i = 0;
        for (BufferedImage image : images
             ) {
            //pngで保存します。
            File file = new File( "output/" + String.format(("Img-%d.png"), i));
            ImageIO.write(image, "PNG", file);
            i++;
        }
    }
}

実行結果

f:id:lendoris:20210127161038p:plain

 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java  Wordでブックマークを追加・削除

Microsoft Word 文書のなかに「しおり」のようにブックマークを挿入することができます。今日はSpire.Doc for Javaを使ってWordでブックマークを追加・削除する方法を紹介します。

下準備

1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。

f:id:lendoris:20210127155151p:plain

2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.doc.jarを参照に追加してください。

f:id:lendoris:20210127155210p:plain

ブックマークを追加

import com.spire.doc.*;
import com.spire.doc.documents.Paragraph;

public class InsertBookmark {

    public static void main(String[] args) {

        //Document objectを作成します。
        Document doc = new Document();

        //Wordをロードします。
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\sample.docx");

        //しおりをつけたい段落を取得します。
        Paragraph paragraph = doc.getSections().get(0).getParagraphs().get(1);

        //BookmarkStartを追加し、段落の最初へ移動させます。
        BookmarkStart start = paragraph.appendBookmarkStart("しおりです");
        paragraph.getItems().insert(0,start);

        //段落の最後にBookmarkEndを追加します。
        paragraph.appendBookmarkEnd("myBookmark");

        //保存します。
        doc.saveToFile("output/AddBookmark.docx", FileFormat.Docx_2013);
    }
}


完成例

f:id:lendoris:20210127155309p:plain

しおりを削除

import com.spire.doc.Document;
import com.spire.doc.FileFormat;

public class RemoveBookmark {

    public static void main(String[] args) {

        //Documentを作成します。
        Document doc = new Document();

        //Wordをロードします。
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\InsertBookmark.docx");

        //初めのしおりを削除します。
        doc.getBookmarks().remove(doc.getBookmarks().get(0));

        //保存します。
        doc.saveToFile("output/RemoveBookmark.docx", FileFormat.Docx);
    }
}

 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Scala + Playで超簡易API作成(環境構築編)

シリーズ

  • 環境構築 <- イマココ
  • マイグレーション
  • クエリ(crudのread)
  • コマンド(crudのcreate,update,delete)

前提条件

  • dockerがインストールされている
  • docker-composeコマンドが使用できる

開発環境

dockerで以下2つのコンテナをたてて作業していきます。

  • workspace(作業用コンテナ)
  • postgres(DB)

1. コンテナを用意

今回は私が用意した開発環境を使います

git clone https://github.com/poposuke1995x/dev-envs.git

プロジェクト名のディレクトリを作成

mkdir scala-sample-api

scalaディレクトリ配下をプロジェクト配下にコピー

cp -r dev-envs/scala/* ./scala-sample-api/

起動

cd scala-sample-api
docker-compose up -d

2. 雛形からファイルを作成

作業用コンテナに入る

docker-compose exec workspace fish

雛形からファイルを作成(5分以上かかる場合があるので休憩してください)

sbt new playframework/play-scala-seed.g8

以下を指定

  • name: scala-sample-api
  • organization: Enterでデフォルト指定

workspaceディレクトリ直下にプロジェクトの中身が展開されるようにファイルを移動します

rm -rf project/ target/ (大いなる力には大いなる責任が伴う)
mv scala-sample-api/* .
rm -r scala-sample-api/

ここまでくれば完了です。

付録

作業用コンテナの紹介

  • fish shellが使えます
  • cdコマンドで移動するたび自動でlsコマンドが走ります
  • fzfを使用してコマンド検索ができます
  • asdf-vmを使用しているのでsbt, javaのバージョンを簡単に切り替えられます
  • vimの基本的なオプションを予め設定しています
    • ハイライト
    • 行数表示
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

サブネットマスクの正当性検証

サブネットマスク文字列のバリデーションコードです。
調べてもドンピシャの情報を見つけきれなかったので記録に残します。評価結果はいずれもbool値。
以下のようなそもそもIPv4アドレスとして正しいかの検証は、多くの言語でライブラリが存在すると思うので事前にそれを使用してください。

  • 2進表示が8ビットを超えていない(255以下である)
  • オクテットの個数が4

サブネットマスク記法

Java

Arrays.asList(String.join("", "255.192.0.0".split("\\."))).forEach(x -> {
    String binStr = Integer.toString(Integer.parseInt(x));
    binStr = "00000000" + binStr;
    int len = binStr.length()
    binStr.substring(len - 8, len);
}).matches("^1*0*$");

Javascript

"255.192.0.0".split(".")
.map(x => ('00000000' + Number(x).toString(2)).slice(-8))
.join("").match(/^1*0*$/) != null

CIDR記法

仮に192.168.1.1/10などであるとします。

Java

"10".matches("^[0-9]{1,2}$") && Arrays.asList(IntStream.rangeClosed(0, 32).toArray()).contains(Integer.parseInt("10"));

Javascript

'10'.match(/^[0-9]{1,2}$/) != null && [...Array(33).keys()].indexOf(Number('10'))
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む