かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Java

Maven + Spring Boot で最終成果物の jar のファイル名を変更する

デフォルトだとファイル名にバージョン番号とか入っちゃいますよね。 それを辞めたいときは pom.xml の build タグの下に finalName タグで指定できます。こんな感じで。 <project ...> <build> <finalName>app</finalName> ... </build> ... </project> ... これで成果物は `app.jar` になります。

色々なプログラミング言語で JSON をパースするためのイカしたサービス quicktype

今日、マイクロソフト本社から来た David さんとお昼ご飯をしたときに教えてもらえた彼のプロダクトが凄かったので紹介したいと思います。 quicktype.io quicktype JSON をペーストするとシリアライズ・デシリアライズするためのコードを出力してくれるサー…

Hibernate(やSpring?)がProxy化してるJDBCのConnectionからoracle.jdbc.Connectionを取得する方法

ちょっと古傷を触ってしまってJavaってました。 HibernateなどからConnectionを取得した時に生のJDBCのコネクションをそのまま返すのではなく、Proxy化されてOracle固有の処理をしたくて困ったことがありましたとさ。解決策としてはgetMetaDataでMedaDataを…

Spring Bootで未入力項目をNullにする(バリデーション時に未入力のときはスルーするようにする)

Spring Bootのバリデーションは属性つけるだけで簡単にできます。 5.5. 入力チェック — TERASOLUNA Global Framework Development Guideline 1.0.0.publicreview documentation 上記のページの最後に書いてある内容なのですが、このアノテーションはnull値は…

Spring BootでToDoアプリを作ってみた

こんな感じで作ってみた。 画面はしょっぱいですが、TODOアプリです。 pomの準備 とりあえずmavenでプロジェクトを作成したら、pomを編集します。お約束ですね。最近みないで打てるようになってきました。

Spring Bootでファイルダウンロードをする

Spring Bootでファイルのダウンロードを試してみました。HttpServletResponseを引数に受け取ってServlet時代と同じように書き込みをする方法もあるみたいなのですが、今回はResponseEntityというクラスを使ってみました。 こいつを使ってContent-Typeなんか…

Spring BootのThymeleafのテンプレート内でJavaScriptを書く

Thymeleafのテンプレート内でJavaScriptを書くときは以下のように書きます。おまじないだと思って <scrpit type="text/javascript"> /**/ </script> JavaScriptの<や>などがXMLのタグの開始なんかとして見られないためですね。

Spring Boot小ネタ ModelAttributeで名前を指定しなかったときのデフォルトの名前

@ModelAttribute("hoge") FooForm a みたいにしたらhogeという名前でThymeleafからアクセスできるようになります。このとき @ModelAttribute FooForm a のように名前を省略することもできます。そのときはクラス名の最初を小文字にした名前でアクセスできま…

Spring Bootでファイルをアップロードする

Spring BootでファイルアップロードをするにはMultipartFileインターフェースを受け取るようにするといいみたいです。 こんなクラスを定義して package okazuki.fileupload.simple.controllers; import org.springframework.web.multipart.MultipartFile; pu…

Spring Bootでファイルアップロード/ダウンロードのことが書いてあるページのメモ

Getting Started · Uploading Files Spring boot service to download a file - Stack Overflow あとで、このページをもとに試してみて記事にしよう。

Spring Bootでコントローラの単体テスト

Spring Bootは単体テスト機能もついてます。 35. Testing Spring Bootでコントローラの単体テストをするには、まず単体テストのクラスをアノテーションでいろいろ飾ってやる必要があります。 package okazuki.validationEdu; import org.junit.After; import…

Spring BootでバリデーションのメッセージをValidationMessages.properties以外にする

Spring Bootはデフォルトで検証エラーのメッセージをValidationMessages.propertiesから取得します。これを変えたい!って思ったら以下のようにします。 手順としては LocalValidatorFactoryBeanを作成する messageSourceを任意のものにする WebMvcAutoConfi…

Spring Bootで入力値の検証(バリデーション)の順番を制御する

Spring Bootで入力値の検証 - かずきのBlog@hatenaokazuki.hatenablog.com 基本的に上の記事の通りでいいんですが、複数の属性を同じプロパティにつけた場合に、一気にバリデーションが実行されてエラーメッセージがうざいことになってしまいます。例えば以…

Spring Bootを使って実行時にロケールを切り替える

実行時に相手に言語を選択させて表示言語を切り替えるっていうことがあると思います。 Spring Bootでもそういった機能があります。 まず、Appクラスで以下のBeanを公開します。 SessionLocaleResolver LocaleChangeInterceptor そしてWebMvcAutoCOnfiguratio…

MessageSourceのもとになるプロパティファイルを複数設定する方法

Spring Bootのメッセージはデフォルトでmessages.propertiesから取得されます。Thymeleafからは <span th:text="#{hogehoge}">XXX</span> のように取得します。 このmessages.propertiesが気に入らなければapplication.propertiesでカスタマイズすることができます。 以下の設定項目を使います。…

Spring Bootをparentをセットせずに使いたい

Spring Bootってpom.xmlのparentを設定するんですが既存のプロジェクトだと既にparentって使われてたりしたりするケースもあると思います。そんなときどうするか? ということで、以下のpom.xmlでいけました。

Spring BootでigGridを使ってハイパーリンクの列を作りたい

ハイパーリンクの列を作りたい!ということもあります。そんな時には、igGridの列の定義にunbound: true, template: "ここにリンクのHTML"という感じの追加してやります。 igGridのサンプル的には以下のようにやります。 列テンプレート サンプル - Grid コ…

Spring BootでInfragistics IgniteUIのLayoutManagerを使う

IgniteUIにはLayoutManagerなる機能がついています。こいつを使うとJavaのSwingのBorderLayoutみたいなレイアウトが簡単にできるようになっています。因みに、Bootstrapみたいなグリッドレイアウトもサポートしています。 ここでは、お試しとしてBorderLayou…

Spring BootでIgniteUIを使ってみる その2

Spring BootでIgniteUIを使ってみる - かずきのBlog@hatenaokazuki.hatenablog.com 上記記事では、REST APIを呼び出してigGridにバインドしてました。今回はJSONをHTMLに埋め込む形でやってみようと思います。 こんな感じにModelに適当にListを突っ込みます…

Spring BootでIgniteUIを使ってみる

先ほどJSONを返すサービスの作り方がわかったのでIgniteUIのGridにバインドしてみました。 Spring BootでJSONを返すAPIを作る - かずきのBlog@hatenaokazuki.hatenablog.com IgniteUIのLoaderを使って必要なファイルは読み込んでもらうようにしてもらってま…

Spring BootでJSONを返すAPIを作る

超簡単でした。@RestControllerで戻り値がオブジェクトでOKっぽいです。 package okazuki.igniteui.controllers; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.RequestMapping; import org.springfr…

Spring BootでapplicationContext.xmlのような自前の構成ファイルを読み込ませるには

src/main/resourcesに適当な名前(ここではapplicationContext.xml)でSpringの構成ファイルを作成します。そして、Appクラスに以下のようにImportResourceアノテーションをつければOKです。 @SpringBootApplication @ImportResource("classpath:application…

Spring BootでSessionを扱う(SessionAttribute版)

SessionAttributeを使うと同じコントローラ内でオブジェクトを持ちまわることが出来ます。 詳細は全部こっちに書いてあります。 5.8. セッション管理 — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.0.0.RELEASE documentation 試し…

Spring BootでFilterを使う

Filterを実装したクラスを用意します。 class LogFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, Fil…

Spring Bootで認証を行う

サイトにアクセスするとログインページが出て、ログインするとメニューページに行くというものを作ってみようと思います。 プロジェクトの作成 プロジェクトを作ってpom.xmlを編集します。まずはSpring Boot使うためのお約束として以下のものを追加します。 <parent> <groupId></groupid></parent>…

Spring Bootでデータベースを扱う

h2データベースでさくっと試してみました。 pom.xmlに以下の記述を追加。今回はh2なのでh2のjdbcドライバを追加してます。SQL ServerならSQL ServerのJDBCドライバを追加するといいと思います。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>c</groupid></dependency>…

Spring BootのView(Thymeleaf)でプロパティファイルの文字列を出したい

超簡単です。 #{プロパティのキー} でOKです。これで、messages.propertiesの中からメッセージ拾ってきてくれます。 <span th:text="#{helloworld}">ほげほげ~</span> こんかなんじ。

Spring Bootで入力値の検証

Spring Bootで入力値の検証をします。 基本 Bean Validationが使えるみたいです。 Using Bean Validation - The Java EE 6 Tutorial ということで、以下のようなクラスを作ってアノテーションをつけるだけでOK。 package helloboot.modelattr.controllers; i…

Spring Bootでリクエストパラメータをオブジェクトで受け取る

@RequestParam("hoge")をメソッドの引数に使って1つ1つ受け取るのもいいですが、数が増えてくると1つのクラスにまとめたくなったりしますよね。そんな時に使えるのが@ModelAttributeアノテーション。 こんな入力フォームがあるとして <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Insert title here</title> </head> <body></body></html>…

MavenでプロジェクトのJDKを1.8にする方法

なんでデフォルトが古代の1.6なんでしょうか…(jarのプロジェクトの場合は、さらに古代の1.5) pom.xmlのpropertiesにjava.versionを足してやればOKです。 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> これを足した状態でプロジェクトの右クリックメニューからMaven ⇒ Update Project...を選…