Spring

Spring

Spring的两种依赖注入方式:setter方法注入与构造方法注入

Spring生命周期

Spring Bean 的生命周期

img

  • BeanPostProcessor.postProcessBeforeInitialization,BeanPostProcessorpostProcessAfterInitialization相当于夹在InitializingBean,init_method两端使用
  • BeanFactory级Bean生命周期接口Bean级生命周期接口的区别在于BeanFactory级Bean的方法用在所有bean上,每一个bean创立时都会调用该方法,而Bean级别是针对其中一个bean而写的。注意,他们的参数都是bean
  • BeanFactoryPostProcessor:工厂后处理器。容器级接口,仅在应用上下文初始化时调用一次,其目的是完成一些配置文件的加工处理工作,属于ApplicationContext的Bean生命周期。

Spring http序列化与反序列化

HttpMessageConverter是这样转换数据的

定制化json序列化Converter

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    ObjectMapper objectMapper = converter.getObjectMapper();
    //可以setDateFormat设置时间序列化格式
    objectMapper.setSerializationInclusion(Include.ALWAYS);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    converter.setObjectMapper(objectMapper);
    return converter;
}

后端服务而言大多数都是使用UTC时区,只是在序列化与反序列时,将时间按照用户的时区,转换到对应的时区时间。

一般而言,用户中心的用户信息中都会存有时区字段,我们可以在时间序列化器中添加用户登录信息,将时区字段添加到SimpleDateForma:sdf.setTimeZone(tz);

时间序列化器 StdDateFormat

自定义时间序列化器,需要extends StdDateFormat

最重要是重写下两个方法。重写两个方法,将时区字段添加到sdf中,最后方法再调用sdf.parse(dateStr, pos);sdf.format(date, toAppendTo, fieldPosition);,我们只需要关注特制化,而不需要关心序列化本身。

//反序列化
public Date parse(String dateStr);

//序列化
public StringBuffer format(Date date, StringBuffer toAppendTo,
            FieldPosition fieldPosition);
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");返回全部的时间信息给前端,让前端自行选择。

​ 我们经常在字段上添加注解@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8"),来控制时间序列化格式与时区。但是假如添加了此注解,那么就不会走上文的全局自定义时间序列化器。假如时区敏感、用户信息中含有时区信息的系统,请勿使用@JsonFormat,让所有的时间字段通过全局序列化器,否则会造成时区信息错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值