値の検証時のエラーメッセージ
セルの値の検証時など例外がスローされ、 CsvExceptionConverter
によりメッセージに変換します。
CsvExceptionConverter は、CsvAnnotationBeanReader/CsvAnnotationBeanWriter に設定します。
メッセージリソースは MessageResolver
で管理されてます。
デフォルトでは、
ResourceBundleMessageResolver
が設定されています。ResourceBundleMessageResolver では、システムのプロパティファイル
com/github/mygreen/supercsv/localization/SuperCsvMessages.properties
が読み込まれます。独自のメッセージは、クラスパスのルート配置した
SuperCsvMessages.properties
が読み込まれます。
実装を切り替えることで、他の形式のファイルからも取得することができます。
クラス名 |
説明 |
---|---|
ResourceBundleMessageResolver |
java.util.ResourceBundle を経由してメッセージを参照します。デフォルトでは
SuperCsvMessages.properties を読み込みます。 |
PropertiesMessageResolver |
java.util.Properties を経由してメッセージを参照します。 |
SpringMessageResolver |
org.springframework.context.MessageSource を経由してメッセージを参照します。詳細は、 Spring Frameworkとの連携(エラーメッセージの設定方法) を参照してください。
|
また、メッセージ中には {var}
の形式で変数が可能です。
さらに、${exp}
の形式で 式言語の Java Expression Language (JEXL) が利用可能です。
デフォルト設定では、式言語ので呼び出し可能な関数が登録されています。
com.github.mygreen.supercsv.expression.CustomFunction
のメソッドが接頭語 f: を付けて呼び出し可能です。
また、独自の関数も登録可能です。
1import com.github.mygreen.supercsv.io.CsvAnnotationBeanReader;
2import com.github.mygreen.supercsv.localization.MessageInterpolator;
3import com.github.mygreen.supercsv.localization.ResourceBundleMessageResolver;
4import com.github.mygreen.supercsv.validation.CsvExceptionConverter;
5import com.github.mygreen.supercsv.expression.ExpressionLanguageJEXLImpl;
6
7import java.nio.charset.Charset;
8import java.nio.file.Files;
9import java.io.File;
10import java.util.ResourceBundle;
11
12import org.supercsv.prefs.CsvPreference;
13
14public class Sample
15 {
16
17 public void customMessageAndExpression() {
18
19 // CsvExceptionConverterの作成
20 CsvExceptionConverter exceptionConverter = new CsvExceptionConverter();
21
22 // メッセージソースを既存の物に対して追加する
23 ResourceBundleMessageResolver messageResolver = new ResourceBundleMessageResolver();
24 messageResolver.addResourceBundle(ResourceBundle.getBundle("SampleMessages"));
25 exceptionConverter.setMessageResolver(messageResolver);
26
27 // 式言語に独自の関数を登録
28 // 参照可能な関数は、public static である必要があります。
29 ExpressionLanguageJEXLImpl el = new ExpressionLanguageJEXLImpl();
30 Map<String, Object> funcs = new HashMap<>();
31 funcs.put("my", SampleFunctions.class);
32 el.getJexlEngine().setFunctions(funcs);
33
34 // カスタマイズした式言語の登録
35 exceptionConverter.setMessageInterpolator(new MessageInterpolator(el));
36
37 // CsvExceptionConverterを設定する
38 CsvAnnotationBeanReader<UserCsv> csvReader = new CsvAnnotationBeanReader<>(
39 UserCsv.class,
40 Files.newBufferedReader(new File("user.csv").toPath(), Charset.forName("Windows-31j")),
41 CsvPreference.STANDARD_PREFERENCE);
42
43 csvReader.setExceptionConverter(exceptionConverter);
44
45 //... 以下省略
46 }
47
48}