エラーメッセージの設定方法

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}