Ymirでは必要に応じてオブジェクトの型変換が自動的に行なわれます。
例えばリクエストパラメータidの値が文字列の10である場合、次のSetterの引数はintの10になります:
@RequestParameter public void setId(int id) { this.id = id; }
型の変換を行なっているのはorg.seasar.ymir.converter.TypeConversionManagerコンポーネントです。
標準のTypeConversionManagerコンポーネントは次のような特徴を持っています。
- 変換先の型がプリミティブ型の場合、null値や空文字列はプリミティブ型毎のデフォルト値に変換されます。値が変換できない場合もプリミティブ型毎のデフォルト値に変換されます。
- 変換先の型がプリミティブ型でない場合、null値や空文字列は基本的にnull値に変換されます。値が変換できない場合もnull値に変換されます。
変換対象の型
Ymirの標準の変換対象の型は以下の通りです。
- boolean / char / byte / short / int / long / float / double
- Boolean / Character / Byte / Short / Integer / Long / Float / Double
- String
- Class
- java.math.BigDecimal / java.math.BigInteger
- java.util.Date(変換元が文字列の場合のパターンは「yyyy-MM-dd HH:mm:ss」)
- java.io.File
- java.sql.Date(変換元が文字列の場合のパターンは「yyyy-MM-dd」)
- java.sql.Time(変換元が文字列の場合のパターンは「HH:mm:ss」)
- java.sql.Timestamp(変換元が文字列の場合のパターンは「yyyy-MM-dd HH:mm:ss.fffffffff」)
- java.net.URL
日付関連の変換
文字列を日付関連の型(java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp)に変換する場合の文字列のパターンは上述した通りですが、Setterメソッドに@Dateアノテーションが付与されている場合は@Dateアノテーションで指定されている日付パターンで文字列が解釈されます。