当前位置: 首页 > news >正文

建设电子商务网站十大软件培训机构

建设电子商务网站,十大软件培训机构,免费软件恢复微信聊天记录,免费公司logo设计图在Spring中经常需要各种数据类型之间进行转换,比如配置文件中的数据转换为代码所需要的数据类型,在使用SpringMvc的时候,将前台传来的参数自动转换为我们接收参数时定义的类型。 Spring中的ConversionService就是提供这种服务的 1.DefaultC…
在Spring中经常需要各种数据类型之间进行转换,比如配置文件中的数据转换为代码所需要的数据类型,在使用SpringMvc的时候,将前台传来的参数自动转换为我们接收参数时定义的类型。

Spring中的ConversionService就是提供这种服务的

1.DefaultConversionService

DefaultConversionService是一种默认的实现,如果我们不定义,就是使用默认的
@Test
public void defaultConversionService(){ConversionService conversionService = new DefaultConversionService();//这里是校验这个DefaultConversionService是否支持将String转换为Integerboolean b = conversionService.canConvert(String.class, Integer.class);System.out.println(b);Long convert = conversionService.convert("123", Long.class);System.out.println(convert);String convert1 = conversionService.convert(new Date() , String.class);System.out.println(convert1);Date convert2 = conversionService.convert("Mon Nov 04 23:32:14 CST 2024" , Date.class);System.out.println(convert2);}运行结果:
true
123
Tue Nov 05 11:02:17 CST 2024
Tue Nov 05 13:32:14 CST 2024

我们可以看到这里DefaultConversionService 可以成功的将 String转换为Long,将Date转换为String,将String转换为Date

为什么DefaultConversionService能支持这么多数据类型之间的相互转换呢,我们看看他的源码就知道了,原来在DefaultConversionService构造方法中就调用addDefaultConverters()方法注册了我们常用的数据类型转换器Converter,如果我们需要转换的时候,它就会找一个能够完成转换的Converter进行转换

public class DefaultConversionService extends GenericConversionService {@Nullableprivate static volatile DefaultConversionService sharedInstance;/*** Create a new {@code DefaultConversionService} with the set of* {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}.*/public DefaultConversionService() {addDefaultConverters(this);}/*** Return a shared default {@code ConversionService} instance,* lazily building it once needed.* <p><b>NOTE:</b> We highly recommend constructing individual* {@code ConversionService} instances for customization purposes.* This accessor is only meant as a fallback for code paths which* need simple type coercion but cannot access a longer-lived* {@code ConversionService} instance any other way.* @return the shared {@code ConversionService} instance (never {@code null})* @since 4.3.5*/public static ConversionService getSharedInstance() {DefaultConversionService cs = sharedInstance;if (cs == null) {synchronized (DefaultConversionService.class) {cs = sharedInstance;if (cs == null) {cs = new DefaultConversionService();sharedInstance = cs;}}}return cs;}/*** Add converters appropriate for most environments.* @param converterRegistry the registry of converters to add to* (must also be castable to ConversionService, e.g. being a {@link ConfigurableConversionService})* @throws ClassCastException if the given ConverterRegistry could not be cast to a ConversionService*/public static void addDefaultConverters(ConverterRegistry converterRegistry) {addScalarConverters(converterRegistry);addCollectionConverters(converterRegistry);converterRegistry.addConverter(new ByteBufferConverter((ConversionService) converterRegistry));converterRegistry.addConverter(new StringToTimeZoneConverter());converterRegistry.addConverter(new ZoneIdToTimeZoneConverter());converterRegistry.addConverter(new ZonedDateTimeToCalendarConverter());converterRegistry.addConverter(new ObjectToObjectConverter());converterRegistry.addConverter(new IdToEntityConverter((ConversionService) converterRegistry));converterRegistry.addConverter(new FallbackObjectToStringConverter());converterRegistry.addConverter(new ObjectToOptionalConverter((ConversionService) converterRegistry));}/*** Add common collection converters.* @param converterRegistry the registry of converters to add to* (must also be castable to ConversionService, e.g. being a {@link ConfigurableConversionService})* @throws ClassCastException if the given ConverterRegistry could not be cast to a ConversionService* @since 4.2.3*/public static void addCollectionConverters(ConverterRegistry converterRegistry) {ConversionService conversionService = (ConversionService) converterRegistry;converterRegistry.addConverter(new ArrayToCollectionConverter(conversionService));converterRegistry.addConverter(new CollectionToArrayConverter(conversionService));converterRegistry.addConverter(new ArrayToArrayConverter(conversionService));converterRegistry.addConverter(new CollectionToCollectionConverter(conversionService));converterRegistry.addConverter(new MapToMapConverter(conversionService));converterRegistry.addConverter(new ArrayToStringConverter(conversionService));converterRegistry.addConverter(new StringToArrayConverter(conversionService));converterRegistry.addConverter(new ArrayToObjectConverter(conversionService));converterRegistry.addConverter(new ObjectToArrayConverter(conversionService));converterRegistry.addConverter(new CollectionToStringConverter(conversionService));converterRegistry.addConverter(new StringToCollectionConverter(conversionService));converterRegistry.addConverter(new CollectionToObjectConverter(conversionService));converterRegistry.addConverter(new ObjectToCollectionConverter(conversionService));converterRegistry.addConverter(new StreamConverter(conversionService));}private static void addScalarConverters(ConverterRegistry converterRegistry) {converterRegistry.addConverterFactory(new NumberToNumberConverterFactory());converterRegistry.addConverterFactory(new StringToNumberConverterFactory());converterRegistry.addConverter(Number.class, String.class, new ObjectToStringConverter());converterRegistry.addConverter(new StringToCharacterConverter());converterRegistry.addConverter(Character.class, String.class, new ObjectToStringConverter());converterRegistry.addConverter(new NumberToCharacterConverter());converterRegistry.addConverterFactory(new CharacterToNumberFactory());converterRegistry.addConverter(new StringToBooleanConverter());converterRegistry.addConverter(Boolean.class, String.class, new ObjectToStringConverter());converterRegistry.addConverterFactory(new StringToEnumConverterFactory());converterRegistry.addConverter(new EnumToStringConverter((ConversionService) converterRegistry));converterRegistry.addConverterFactory(new IntegerToEnumConverterFactory());converterRegistry.addConverter(new EnumToIntegerConverter((ConversionService) converterRegistry));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());converterRegistry.addConverter(new StringToUUIDConverter());converterRegistry.addConverter(UUID.class, String.class, new ObjectToStringConverter());}}

2.DefaultFormattingConversionService

有的时候我们需要将某一种数据类型转换为指定的字符串格式,也需要将指定格式的字符串转换为某一种数据类型,比如我们需要将Date转为为yyyy-MM-dd格式的字符串。我们在配置文件配置yyyy-MM-dd 格式的字符串,需要将其转换为Date类型的数据。在SpringMvc将数据返回给前端之前我们可能需要将Person类型的数据转换为JSON格式的字符串

这个时候我们就需要DefaultFormattingConversionService,它在完成数据类型转换的同时还支持将某种数据类型转换为指定格式的字符串,而且我们还可以自定义格式转换器来支持我们自定义的数据类型。

2.1 自定义Date和String之间转换的Formatter
@Test
public void defaultFormattingConversionService(){DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();conversionService.addFormatter(new Formatter<Date>() {@Overridepublic String print(Date object, Locale locale) {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(object);}@Overridepublic Date parse(String text, Locale locale) throws ParseException {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(text);}});String convert1 = conversionService.convert(new Date() , String.class);System.out.println(convert1);Date convert2 = conversionService.convert("2024-11-04 23:52:36" , Date.class);System.out.println(convert2);}运行结果:
2024-11-05 11:48:33
Mon Nov 04 23:52:36 CST 2024

上面的代码我们自定义了一个Date和String的Formatter,那么DefaultFormattingConversionService在进行Date和String之间的相互转换时,就会用我们自定义的Formatter 进行格式化和解析

@Test
public void defaultFormattingConversionService(){DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();conversionService.addFormatter(new Formatter<Date>() {@Overridepublic String print(Date object, Locale locale) {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(object);}@Overridepublic Date parse(String text, Locale locale) throws ParseException {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(text);}});String convert1 = conversionService.convert(new Date() , String.class);System.out.println(convert1);Date convert2 = conversionService.convert("Mon Nov 04 23:32:14 CST 2024" , Date.class);System.out.println(convert2);}运行结果:
org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value 'Mon Nov 04 23:32:14 CST 2024'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [Mon Nov 04 23:32:14 CST 2024]

这里报错了,说明了我们添加了自定义的Formatter之后,不支持将Mon Nov 04 23:32:14 CST 2024格式的字符串转换为Date类型了,支持支将yyyy-MM-dd HH:mm:ss格式的字符串转换为Date类型,说明之前默认的支持Mon Nov 04 23:32:14 CST 2024格式的Formatter被我们自定义Formatter给覆盖了

2.2 自定义Person和String之间转换的Formatter
@Test
public void defaultFormattingConversionService1(){DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();conversionService.addFormatter(new Formatter<Person>() {@Overridepublic String print(Person object, Locale locale) {return JSON.toJSONString(object);}@Overridepublic Person parse(String text, Locale locale) throws ParseException {return JSON.parseObject(text , Person.class);}});Person person = new Person();person.setName("孙悟空");person.setAge(20);String convert1 = conversionService.convert(person , String.class);System.out.println(convert1);Person convert2 = conversionService.convert(convert1 , Person.class);System.out.println(convert2);}运行结果:
{"age":20,"name":"孙悟空"}
Person{name='孙悟空', age=20}

我们看到成功将Person对象转换为我们自定义的JSON格式,也可以成功将JSON格式的字符串转换为Person对象

http://www.tj-hxxt.cn/news/118724.html

相关文章:

  • 网站建设实习心得网络seo是什么工作
  • 房产网站开发报价统计工具
  • 如何做网站卖东西深圳网络推广公司有哪些
  • 太原建设银行保安招聘网站个人建网站的详细步骤
  • 高端品牌女装连衣裙上海百度提升优化
  • 建设工程资料网站十八大禁用黄app入口
  • 网站建设 套餐seo排名的影响因素有哪些
  • 用pc网站建设手机网站班级优化大师网页版登录
  • 软件开发app开发定制外包11seo综合查询什么意思
  • 网站图片在手机上做多大最清晰关键词排名
  • 网站模型怎么做世界军事新闻
  • 现在由哪些网站可以做外链域名注册阿里云
  • 市南区网站建设seo推广百度百科
  • 龙湖地产 网站建设发外链的平台有哪些
  • 做游戏网站的需求分析百度做推广一般要多少钱
  • seo外贸网站建设盐城seo排名
  • WordPress可以做社交网站嘛东莞网络营销公司
  • b2b网站免费建设chrome官网下载
  • 政府网站建设水平seo排名工具外包
  • 东莞排名推广seo中文意思是
  • wordpress添加百度统计百度seo优化教程免费
  • 网站开发与维护的工作内容珠海网站建设
  • 自己搭建公司网站福州seo代理计费
  • 做的好的购物网站网站安全检测平台
  • 高端网站建设多少钱在线网站seo诊断
  • ps做网页怎么在网站上打开企业营销网站制作
  • 推进门户网站建设 用好用活2024年8月爆发新的大流行病毒吗
  • 商品网站策划书桂林seo排名
  • 农村网站建设的意义好的竞价推广外包公司
  • asp网站管理系统app开发者需要更新此app