類型轉換

預設情況下,會安裝各種數字和日期類型的格式器,並支援透過欄位和參數上的 @NumberFormat@DurationFormat@DateTimeFormat 進行自訂。

若要註冊自訂格式器和轉換器,請使用下列項目

  • Java

  • Kotlin

  • Xml

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

	@Override
	public void addFormatters(FormatterRegistry registry) {
		// ...
	}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {

	override fun addFormatters(registry: FormatterRegistry) {
		// ...
	}
}
<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService"
	  class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<bean class="org.example.MyConverter"/>
		</set>
	</property>
	<property name="formatters">
		<set>
			<bean class="org.example.MyFormatter"/>
			<bean class="org.example.MyAnnotationFormatterFactory"/>
		</set>
	</property>
	<property name="formatterRegistrars">
		<set>
			<bean class="org.example.MyFormatterRegistrar"/>
		</set>
	</property>
</bean>

預設情況下,Spring MVC 在剖析和格式化日期值時會考量請求地區設定。這適用於日期表示為具有 "input" 表單欄位的字串的表單。但是,對於 "date" 和 "time" 表單欄位,瀏覽器使用 HTML 規格中定義的固定格式。對於這種情況,可以如下自訂日期和時間格式

  • Java

  • Kotlin

@Configuration
public class DateTimeWebConfiguration implements WebMvcConfigurer {

	@Override
	public void addFormatters(FormatterRegistry registry) {
		DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
		registrar.setUseIsoFormat(true);
		registrar.registerFormatters(registry);
	}
}
@Configuration
class DateTimeWebConfiguration : WebMvcConfigurer {

	override fun addFormatters(registry: FormatterRegistry) {
		DateTimeFormatterRegistrar().apply {
			setUseIsoFormat(true)
			registerFormatters(registry)
		}
	}
}
如需何時使用 FormatterRegistrar 實作的詳細資訊,請參閱 FormatterRegistrar SPIFormattingConversionServiceFactoryBean