@Target(value={FIELD,ANNOTATION_TYPE}) @Retention(value=RUNTIME) @Documented @Repeatable(value=CsvEquals.List.class) @CsvConstraint(value={}) public @interface CsvEquals
全てのクラスタイプに指定可能です。
属性value()
で比較対象の値を指定します。
@CsvBean
public class SampleCsv {
@CsvColumn(number=1)
@CsvEquals({"admin", "normal"})
private String type;
// 書式を指定している場合
@CsvColumn(number=2)
@CsvNumberForamt(pattern="#,##0")
@CsvEquals({"-1,000", "1,000"})
private Integer number;
// getter/setterは省略
}
値をDBやファイルなどの別リソースから取得する場合は、属性provider()
にて、
プロバイダEqualedValueProvider
の実装クラスを指定します。
Spring Frameworkと連携している場合は、プロバイダクラスをSpringBeanとして登録しておくことでインジェクションできます。
@CsvBean
public class SampleCsv {
@CsvColumn(number=1)
@CsvEquals(provider=FileEqualedValueProvider.class)
private Integer number;
// setter/getterは省略
}
// プロバイダクラスの実装(ファイルから値を取得する)
public class FileEqualedValueProvider implements EqualedValueProvider<Integer> {
@Override
public Collection<Integer> getEqualedValues(final FieldAccessor field) {
String lines;
try {
lines = Files.readAllLines(
new File("equaled_value.txt").toPath(), Charset.forName("UTF-8"));
} catch (IOException e) {
throw new RuntimeException("fail reading the equaled value file.", e);
}
// 読み取った値をInteger型に変換します。
return lines.stream()
.map(l -> Integer.valueOf(l))
.collect(Collectors.toList());
}
}
public abstract String[] value
複数指定した場合は、何れかに一致すれば問題ありません。
ブール型、数値や日時型の場合は、アノテーションで指定した書式に沿った値を指定する必要があります。
public abstract Class<? extends EqualedValueProvider>[] provider
EqualedValueProvider
の実装クラス。public abstract String message
{key}の書式の場合、プロパティファイルから取得した値を指定できます。
使用可能なメッセージ中の変数は下記の通りです。
value()
をフィールドの型に変換した値です。Collection
の形式です。TextPrinter.print(Object)
でvalidatedValue, equalsValuesの値を文字列に変換します。CellProcessor
に基づいたメッセージが出力されます。public abstract BuildCase[] cases
public abstract Class<?>[] groups
処理ごとに適用するアノテーションを切り替えたい場合に指定します。
DefaultGroup
が適用され全ての処理に適用されます。Copyright © 2022 mygreen. All rights reserved.