Harmonize default converters
Provide Converter implementations for Charset, Currency and TimeZone as related PropertyEditors are available for those. Issue: SPR-13020
This commit is contained in:
		
							parent
							
								
									c0269770af
								
							
						
					
					
						commit
						0612bc7bc5
					
				|  | @ -16,6 +16,8 @@ | |||
| 
 | ||||
| package org.springframework.core.convert.support; | ||||
| 
 | ||||
| import java.nio.charset.Charset; | ||||
| import java.util.Currency; | ||||
| import java.util.Locale; | ||||
| import java.util.UUID; | ||||
| 
 | ||||
|  | @ -75,7 +77,7 @@ public class DefaultConversionService extends GenericConversionService { | |||
| 
 | ||||
| 		converterRegistry.addConverter(new ByteBufferConverter((ConversionService) converterRegistry)); | ||||
| 		if (jsr310Available) { | ||||
| 			Jsr310ConverterRegistrar.registerZoneIdConverters(converterRegistry); | ||||
| 			Jsr310ConverterRegistrar.registerJsr310Converters(converterRegistry); | ||||
| 		} | ||||
| 
 | ||||
| 		converterRegistry.addConverter(new ObjectToObjectConverter()); | ||||
|  | @ -110,6 +112,12 @@ public class DefaultConversionService extends GenericConversionService { | |||
| 		converterRegistry.addConverter(new StringToLocaleConverter()); | ||||
| 		converterRegistry.addConverter(Locale.class, String.class, new ObjectToStringConverter()); | ||||
| 
 | ||||
| 		converterRegistry.addConverter(new StringToCharsetConverter()); | ||||
| 		converterRegistry.addConverter(Charset.class, String.class, new ObjectToStringConverter()); | ||||
| 
 | ||||
| 		converterRegistry.addConverter(new StringToCurrencyConverter()); | ||||
| 		converterRegistry.addConverter(Currency.class, String.class, new ObjectToStringConverter()); | ||||
| 
 | ||||
| 		converterRegistry.addConverter(new StringToPropertiesConverter()); | ||||
| 		converterRegistry.addConverter(new PropertiesToStringConverter()); | ||||
| 
 | ||||
|  | @ -150,7 +158,8 @@ public class DefaultConversionService extends GenericConversionService { | |||
| 	 */ | ||||
| 	private static final class Jsr310ConverterRegistrar { | ||||
| 
 | ||||
| 		public static void registerZoneIdConverters(ConverterRegistry converterRegistry) { | ||||
| 		public static void registerJsr310Converters(ConverterRegistry converterRegistry) { | ||||
| 			converterRegistry.addConverter(new StringToTimeZoneConverter()); | ||||
| 			converterRegistry.addConverter(new ZoneIdToTimeZoneConverter()); | ||||
| 			converterRegistry.addConverter(new ZonedDateTimeToCalendarConverter()); | ||||
| 		} | ||||
|  |  | |||
|  | @ -0,0 +1,36 @@ | |||
| /* | ||||
|  * Copyright 2002-2015 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.core.convert.support; | ||||
| 
 | ||||
| import java.nio.charset.Charset; | ||||
| 
 | ||||
| import org.springframework.core.convert.converter.Converter; | ||||
| 
 | ||||
| /** | ||||
|  * Convert a String to a {@link Charset}. | ||||
|  * | ||||
|  * @author Stephane Nicoll | ||||
|  * @since 4.2 | ||||
|  */ | ||||
| public class StringToCharsetConverter implements Converter<String, Charset> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Charset convert(String source) { | ||||
| 		return Charset.forName(source); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,36 @@ | |||
| /* | ||||
|  * Copyright 2002-2015 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.core.convert.support; | ||||
| 
 | ||||
| import java.util.Currency; | ||||
| 
 | ||||
| import org.springframework.core.convert.converter.Converter; | ||||
| 
 | ||||
| /** | ||||
|  * Convert a String to a {@link Currency}. | ||||
|  * | ||||
|  * @author Stephane Nicoll | ||||
|  * @since 4.2 | ||||
|  */ | ||||
| class StringToCurrencyConverter implements Converter<String, Currency> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Currency convert(String source) { | ||||
| 		return Currency.getInstance(source); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,39 @@ | |||
| /* | ||||
|  * Copyright 2002-2015 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.springframework.core.convert.support; | ||||
| 
 | ||||
| import java.util.TimeZone; | ||||
| 
 | ||||
| import org.springframework.core.convert.converter.Converter; | ||||
| import org.springframework.lang.UsesJava8; | ||||
| import org.springframework.util.StringUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Convert a String to a {@link TimeZone}. | ||||
|  * | ||||
|  * @author Stephane Nicoll | ||||
|  * @since 4.2 | ||||
|  */ | ||||
| @UsesJava8 | ||||
| class StringToTimeZoneConverter implements Converter<String, TimeZone> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public TimeZone convert(String source) { | ||||
| 		return StringUtils.parseTimeZoneString(source); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -20,12 +20,14 @@ import java.awt.Color; | |||
| import java.lang.reflect.Method; | ||||
| import java.math.BigDecimal; | ||||
| import java.math.BigInteger; | ||||
| import java.nio.charset.Charset; | ||||
| import java.time.ZoneId; | ||||
| import java.util.AbstractList; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.Currency; | ||||
| import java.util.EnumSet; | ||||
| import java.util.HashMap; | ||||
| import java.util.LinkedHashMap; | ||||
|  | @ -37,6 +39,7 @@ import java.util.Map; | |||
| import java.util.Optional; | ||||
| import java.util.Properties; | ||||
| import java.util.Set; | ||||
| import java.util.TimeZone; | ||||
| import java.util.UUID; | ||||
| import java.util.stream.Stream; | ||||
| 
 | ||||
|  | @ -277,6 +280,26 @@ public class DefaultConversionServiceTests { | |||
| 		assertEquals(Locale.ENGLISH, conversionService.convert("en", Locale.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testStringToCharset() { | ||||
| 		assertEquals(Charset.forName("UTF-8"), conversionService.convert("UTF-8", Charset.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testCharsetToString() { | ||||
| 		assertEquals("UTF-8", conversionService.convert(Charset.forName("UTF-8"), String.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testStringToCurrency() { | ||||
| 		assertEquals(Currency.getInstance("EUR"), conversionService.convert("EUR", Currency.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testCurrencyToString() { | ||||
| 		assertEquals("USD", conversionService.convert(Currency.getInstance("USD"), String.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testStringToString() { | ||||
| 		String str = "test"; | ||||
|  | @ -801,6 +824,11 @@ public class DefaultConversionServiceTests { | |||
| 		assertEquals("toString() invocations", 0, SSN.toStringCount); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void convertStringToTimezone() { | ||||
| 		assertEquals("GMT+02:00", conversionService.convert("GMT+2", TimeZone.class).getID()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void convertObjectToStringWithJavaTimeOfMethodPresent() { | ||||
| 		assertTrue(conversionService.convert(ZoneId.of("GMT+1"), String.class).startsWith("GMT+")); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue