@Target(value={FIELD,ANNOTATION_TYPE}) @Retention(value=RUNTIME) @Documented @Repeatable(value=CsvWordReplace.List.class) @CsvConversion(value={}) public @interface CsvWordReplace
words()
で置換前の対象となる語彙を指定します。
replacements()
で指定します。words()
とreplacements()
の配列のサイズが異なる場合は、エラーとなります。
@CsvBean
public class SampleCsv {
// 下さい -> ください
// 御願い -> お願い
@CsvColumn(number=1)
@CsvWordReplace(words={"下さい", "御願い"}, replacements={"ください", "お願い"})
private String comment;
// getter/setterは省略
}
語彙をDBやファイルなどの別リソースから取得する場合は、属性provider()
にて、
プロバイダReplacedWordProvider
の実装クラスを指定します。
Spring Frameworkと連携している場合は、プロバイダクラスをSpringBeanとして登録しておくことでインジェクションできます。
@CsvBean
public class SampleCsv {
@CsvColumn(number=1)
@CsvWordReplace(provider=FileReplacedWordProvider.class)
private String comment;
// setter/getterは省略
}
// プロバイダクラスの実装(ファイルから語彙を取得する)
public class FileReplacedWordProvider implements ReplacedWordProvider {
@Override
public Collection<Word> getReplacedWords(final FieldAccessor field) {
// ファイルから語彙の定義を読み込む
List<String> lines;
try {
lines = Files.readAllLines(
new File("replaced_word.txt").toPath(), Charset.forName("UTF-8"));
} catch (IOException e) {
throw new RuntimeException("fail reading the replaced words file.", e);
}
// 読み込んだ各行の値を分割して、ReplacedWordProvider.Word クラスに変換する。
return lines.stream()
.map(l -> l.split(","))
.map(s -> new Word(s[0], s[1]))
.collect(Collectors.toLit());
}
}
public abstract String[] words
replacements()
と同じ個数を設定します。public abstract Class<? extends ReplacedWordProvider>[] provider
ReplacedWordProvider
の実装クラスを設定します。public abstract BuildCase[] cases
public abstract Class<?>[] groups
処理ごとに適用するアノテーションを切り替えたい場合に指定します。
DefaultGroup
が適用され全ての処理に適用されます。Copyright © 2022 mygreen. All rights reserved.