2017年2月25日土曜日

Yaml入門 / Dotinstallで学ぶ

Yamlファイルに最近触れるけど、よくわかっていないのでDotinstallさんの動画を閲覧しました。
メモを残しておく。


メモ

Yamlとは
データ書式

公式サイト
YAML Ain't Markup Language

データ型
  • Scalar
  • Sequence
  • Mapping Hash

コメント
#ハッシュ記号です

Null値
~ チルダ

日付
yyyy-mm-dd

真偽値
true / false

Sequence
- (ハイフンとスペース)に続けて書く(=ブロックスタイル)
or
[]にカンマ区切りで書く(=フロースタイル)

ブロックスタイルの字下げ
ハイフンの前にスペースをつける
インデント前の要素は空白にする
- gee@nifty.com
- 
  - hoge
  - fuga
- yooo

Mapping Hash
key: value方式で: (コロンとスペース)で区切り。
こちらもブロックスタイルとフロースタイルが使える

SequenceとMapping Hashは交互に入れ子にできる

区切り文字にタブは使えない
注意

改行の取り扱い
|改行
最終行の改行を保持する。

|+
最後行以降の改行を保持する

|-
最後以降の改行を保持しない。

|を>に変えると、途中行の改行はスペースとなる

&でアンカー
*で呼び出せる(エイリアス)。変数みたいなもの。
- &hoge hogehoge
- *hoge

==
hogehoge
hogehoge
Mapping Hashは<<: *hoge
で呼び出す

--- と ...
データの区切りを示す
開始が---
終わりが...
1つのデータで、...がなくても問題はない。

Spring Batch / 区切り文字の変更

https://spring.io/guides/gs/batch-processing/ Spring Batchの公式サンプル

やってみてつまづいた点2点
・application.propertiesにDB定義しとかないいけない
・デフォルトパッケージだと動かないので、適当なパッケージ入れる必要がある
※パッケージに入れないのはテストやサンプルぐらいだと思いますが。。。

また、読み込むファイルの区切り文字の変更は「DelimitedLineTokenizer」のコンストラクトの引数で、区切りたい文字を渡す。
\tで、タブ区切りにした例です。
    reader.setLineMapper(new DefaultLineMapper() {
        {
           this.setLineTokenizer(new DelimitedLineTokenizer("\t") {
             {
              setNames(new String[] {"firstName", "lastName"});        
             }
           });        
           setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {
             {
              setTargetType(Person.class);        
             }
           });      
        }
    });

2017年2月20日月曜日

Spring Boot / Redirect先にオブジェクトを渡す

Spring Bootをいじってました。


RedirectAttributes attributes
Spring BootのGetting StartedでRedirect先にオブジェクトが渡せなくて1時間くらいハマってました。
結論、「RedirectAttributes attributes」で回避
  @PostMapping("/")
  public String checkPersonInfo(
          @Valid
          @ModelAttribute("personForm")
          PersonForm personForm
          ,BindingResult bindingResult
          ,RedirectAttributes attributes) {

    if (bindingResult.hasErrors() ) {
      return "form";
    }
    attributes.addFlashAttribute("personForm", personForm);
    return "redirect:/results";
  }
こちらを参考にさせていただきました。
Qiita SpringMVCでリダイレクト先ページにパラメータを渡す方法

brに閉じスラッシュをどうしてもつけたくない
意外とかったるいThymeleafのtemplatemodeの制約
LegacyHTML5だと単独タグでも閉じスラッシュが必要になる。
そこでtemplatemodeをLegacyHTML5にしましたが、この時はnekoHTMLというライブラリをimportする必要があるみたいです。
Gradleなら
dependencies {
        ...
 compile('net.sourceforge.nekohtml:nekohtml')
}

spring.thymeleaf.cache=falseを指定したのに、更新されない!どういうこと!?
IntelliJ上でgradle::bootRunしていて、spring.thymeleaf.cache=falseを設定の上、
HTMLファイルを更新してもブラウザで変更が確認できず調べる羽目になった。

結果、ファイル更新した後にbuildしないと内容は変わりません。
IntelliJ依存も疑って、Terminalでgradle bootRunしてみましたが、
これもbuildし直さなきゃHTMLファイルの変更すら反映されませんでした。

javax.validation.constraints.*のvalidation message
@NotNull(message="hoge")
以上!!簡単かつ簡潔
Spring Bootいいね!!

エラーページ
デフォルトなら、templates配下にerror.htmlを作ればよし。
エラーコードによる分岐はまた今度やります。
こちらを参考にさせてもらいました:システム開発メモ Spring Boot + Thymeleafでエラー画面をカスタマイズする