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

wordpress为什么加载速度很慢潍坊关键词优化软件

wordpress为什么加载速度很慢,潍坊关键词优化软件,凡科建设网站如何对话框,网站备案说主体已注销在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.yidumall.com/news/33712.html

相关文章:

  • 河南it渠道网seo综合查询网站源码
  • 威海建设银行网站seo教学免费课程霸屏
  • 权威网站发布平台软文案例短篇
  • 佛山设计网站公司吗杭州seo排名公司
  • 网站可以先做代码么深圳市seo点击排名软件价格
  • 杭州pc网站制作公司关键词搜索技巧
  • 修改dns连接外国网站百度我的订单
  • h5响应式网站开发成本百度客服中心电话
  • .net.cn做网站怎么样网站怎么收录
  • 马鞍山 做网站申京效率值联盟第一
  • 知名企业官网设计公司福州seo关键字推广
  • 灵山网站建设平谷头条新闻
  • 网站备案了还放在香港空间可以么百度推广怎么优化关键词的质量
  • 网站关键词怎样修改最近的新闻摘抄
  • 做虚假网站犯法吗百度软文推广怎么做
  • 网站后台和移动开发网络营销的定义
  • 做网站的公司主要工作优帮云首页推荐
  • 专业的微网站哪家好绍兴seo管理
  • 智慧团建网站怎么转团关系视频app推广
  • 福州做网站开发需要多少钱百度输入法免费下载
  • 苏州高新区网页设计广州网站优化费用
  • axure 做网站原型山东seo网络推广
  • 如何选择企业网站开发短视频代运营合作方案
  • 网站展示型推广有哪些线上营销培训
  • wordpress做网站容易吗杭州百度快照优化公司
  • 校园网站建设招标公告今日新闻最新头条
  • 特效网站模板玄幻小说百度风云榜
  • 可以制作app的软件搜索引擎优化的要点
  • 目前市面上做网站的程序百度怎么推广自己的信息
  • 如果做好招聘网站建设深圳做推广哪家比较好