エラーメッセージの設定方法
SpringFrameworkの MessageSource
を利用する方法を説明します。
XMLによるコンテナの設定
XMLによる設定方法を説明します。
コンテナの定義の基本は次のようになります。
MessageSource
として、本ライブラリのエラーメッセージcom.github.mygreen.supercsv.localization.SuperCsvMessages
を読み込んでおきます。独自のエラーメッセージがあれば、追加で定義します。
com.github.mygreen.supercsv.localization.SpringMessageResolver
に、MessageSource
を渡します。
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- XMLによるコンテナの定義 -->
3<beans xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context.xsd
10 ">
11
12 <!-- Spring標準のメッセージソースの定義 -->
13 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
14 <property name="basenames">
15 <list>
16 <value>com.github.mygreen.supercsv.localization.SuperCsvMessages</value>
17 <value>MyMessages</value>
18 </list>
19 </property>
20 </bean>
21
22 <!-- 本ライブラリのSpring用のMessgeResolverの定義 -->
23 <bean id="springMessageResolver" class="com.github.mygreen.supercsv.localization.SpringMessageResolver">
24 <property name="messageSource" ref="messageSource" />
25 </bean>
26
27</beans>
JavaConfigによるコンテナの設定
Spring Framework3.0から追加された、JavaソースによるSpringBean定義の方法を説明します。
JavaConfigによる設定を使用する場合は、Spring Frameworkのバージョンをできるだけ最新のものを使用してください。 特に、機能が豊富なバージョン4.0以上の使用を推奨します。
1import org.springframework.context.MessageSource;
2import org.springframework.context.annotation.Bean;
3import org.springframework.context.annotation.ComponentScan;
4import org.springframework.context.annotation.Configuration;
5import org.springframework.context.annotation.Description;
6import org.springframework.context.support.ResourceBundleMessageSource;
7
8import com.github.mygreen.supercsv.localization.SpringMessageResolver;
9
10
11// Javaによるコンテナの定義
12@Configuration
13@ComponentScan(basePackages="sample.spring")
14public class SuperCsvConfig {
15
16 @Bean
17 @Description("Spring標準のメッセージソースの定義")
18 public MessageSource messageSource() {
19 ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
20 messageSource.addBasenames(
21 "com.github.mygreen.supercsv.localization.SuperCsvMessages",
22 "MyMessages");
23 return messageSource;
24 }
25
26 @Bean
27 @Description("本ライブラリのSpring用のMessgeResolverの定義")
28 public SpringMessageResolver springMessageResolver() {
29 return new SpringMessageResolver(messageSource());
30 }
31
32}
SpringMessageResolverの使用方法
CsvExceptionConverter#setMessageResolver(...)
に、SpringBeanとして定義した SpringMessageResolver
を設定します。
さらに、 CsvAnnotationBeanReader#setExceptionConverter(...)
に、作成した CsvExceptionConverter を渡します。
1import com.github.mygreen.supercsv.io.CsvAnnotationBeanReader;
2import com.github.mygreen.supercsv.localization.SpringMessageResolver;
3import com.github.mygreen.supercsv.validation.CsvExceptionConverter;
4
5import java.nio.charset.Charset;
6import java.nio.file.Files;
7import java.io.File;
8
9import org.supercsv.prefs.CsvPreference;
10
11@Service
12public class CsvService {
13
14 @Autowired
15 private SpringMessageResolver messageResolver;
16
17 public void sampleSpring() {
18
19 CsvAnnotationBeanReader<UserCsv> csvReader = new CsvAnnotationBeanReader<>(
20 UserCsv.class,
21 Files.newBufferedReader(new File("user.csv").toPath(), Charset.forName("Windows-31j")),
22 CsvPreference.STANDARD_PREFERENCE);
23
24 // CsvExceptionConverterの作成 - SpringMessageResolverを設定する
25 CsvExceptionConverter exceptionConverter = new CsvExceptionConverter();
26 exceptionConverter.setMessageResolver(messageResolver);
27
28 // CsvExceptionConverterを設定する
29 svReader.setExceptionConverter(exceptionConverter);
30
31 //... 以下省略
32 }
33
34}