- 投稿日:2021-01-27T22:21:33+09:00
【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です:ストリームが閉じられました
- 投稿日:2021-01-27T21:41:07+09:00
spring-kafkaのKafkaListenerでtopicsなどをメソッドやプロパティ経由で指定
spring-kafkaの
KafkaListenerでtopicsなどは基本的にはプロパティで指定するが動的にメソッドやプロパティ経由で指定したい場合がある。その場合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プロパティも使用可能。
- 投稿日:2021-01-27T18:34:08+09:00
WindowsPC内のJavaのバージョン変更
仕事の関係でJava12が入っていたPCにJava8を入れることになったので、作業備忘録。
ダウンロードとインストール
これは分かりやすい記事がたくさんあるので、他の記事を参考にしてください。
必ずJDKとJREの両方をダウンロードしてくださいJREとJDKのシステム環境変数登録
【ユーザーの環境変数】に以下の内容を登録。
変数:JAVA_HOME
値:JDKのディレクトリ
→下の図の例だと「C:\Program Files\Java\jdk1.8.0_281」
※変更前のものは変数から消すか上記を上書きしてください
【システム環境変数】の【Path】内にJREのbinディレクトリのパス
→下の図の例だと「C:\Program Files\Java\jre1.8.0_281\bin」を登録
※変更前のものは消すか上記を上書きしてください
正しく変更されているかの確認
・「ウィンドウズキー」+「R」を押して「cmd」と打ってコマンドプロンプトを立ち上げる。
・コマンドで「java -version」と「javac -version」と打って表示されるバージョンが今回ダウンロードしたバージョンと同じだったらOK!
※「java -version」ではPCが採用しているJREバージョン、「javac -version」ではPCが採用しているJDKバージョンが表示されます。
※もしこれらが正しく表示されていない場合は、環境変数でのディレクトリ指定に誤りが無いか確認してください。以上、自分では滅多にやらないJavaのバージョン変更に関する備忘録でした。
- 投稿日:2021-01-27T16:14:17+09:00
Java Wordをイメージに変換
今回はSpire.Doc for Javaを使ってWordをイメージに変換する、そして、イメージの解像度を設定する方法を紹介します。簡単なので、もしお役に立てば幸いです。
下準備
1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。
2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.doc.jarを参照に追加してください。
コード
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++; } } }実行結果
- 投稿日:2021-01-27T16:04:30+09:00
Java Wordでブックマークを追加・削除
Microsoft Word 文書のなかに「しおり」のようにブックマークを挿入することができます。今日はSpire.Doc for Javaを使ってWordでブックマークを追加・削除する方法を紹介します。
下準備
1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。
2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.doc.jarを参照に追加してください。
ブックマークを追加
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); } }完成例
しおりを削除
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); } }
- 投稿日:2021-01-27T02:08:28+09:00
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-apiscalaディレクトリ配下をプロジェクト配下にコピー
cp -r dev-envs/scala/* ./scala-sample-api/起動
cd scala-sample-api docker-compose up -d2. 雛形からファイルを作成
作業用コンテナに入る
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の基本的なオプションを予め設定しています
- ハイライト
- 行数表示
- 投稿日:2021-01-27T01:26:36+09:00
サブネットマスクの正当性検証
サブネットマスク文字列のバリデーションコードです。
調べてもドンピシャの情報を見つけきれなかったので記録に残します。評価結果はいずれも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*$/) != nullCIDR記法
仮に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'))







