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

分销网站集团门户网站建设企业

分销网站,集团门户网站建设企业,专业上海网站建设公司排名,成都的设计院有哪些在部分场景中#xff0c;后台的时间属性用的不是Date或Long#xff0c;而是Instant#xff0c;Java8引入的一个精度极高的时间类型#xff0c;可以精确到纳秒#xff0c;但实际使用的时候不需要这么高的精确度#xff0c;通常到毫秒就可以了。 而在前后端传参的时候需要…在部分场景中后台的时间属性用的不是Date或Long而是InstantJava8引入的一个精度极高的时间类型可以精确到纳秒但实际使用的时候不需要这么高的精确度通常到毫秒就可以了。 而在前后端传参的时候需要对Instant类型进行序列化及反序列化等处理默认情况下ObjectMapper是不支持序列化Instant类型的需要注册JavaTimeModule才行而且序列化的结果也不是时间戳测试如下 import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test;import java.time.Instant;/*** Instant Jackson测试** author yangguirong*/ Slf4j public class InstantTest {ObjectMapper objectMapper new ObjectMapper();Testvoid serializeTest() throws JsonProcessingException {objectMapper.registerModule(new JavaTimeModule());String str objectMapper.writeValueAsString(Instant.now());log.info(serializeTest: {}, str);// serializeTest: 1691208180.052185000}Testvoid deserializeTest() throws JsonProcessingException {objectMapper.registerModule(new JavaTimeModule());Instant instant objectMapper.readValue(1691208180.052185000, Instant.class);log.info(deserializeTest: {}, instant);// deserializeTest: 2023-08-05T04:03:00.052185Z} }想要将其序列化为毫秒时间戳需要对序列化及反序列化进行自定义 import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; import lombok.extern.slf4j.Slf4j;import java.io.IOException; import java.time.Instant;/*** 自定义Instant序列化及反序列** author yangguirong*/ public class InstantMillsTimeModule extends SimpleModule {public InstantMillsTimeModule() {this.addSerializer(Instant.class, new InstantMillisecondsSerializer());this.addDeserializer(Instant.class, new InstantMillisecondsDeserializer());}public static class InstantMillisecondsSerializer extends JsonSerializerInstant {Overridepublic void serialize(Instant instant, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {if (instant null) {jsonGenerator.writeNull();} else {jsonGenerator.writeNumber(instant.toEpochMilli());}}}Slf4jpublic static class InstantMillisecondsDeserializer extends JsonDeserializerInstant {Overridepublic Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {try {long mills p.getValueAsLong();return mills 0 ? Instant.ofEpochMilli(mills) : null;} catch (Exception e) {log.error(Instant类型反序列化失败val: {}, message: {}, p.getText(), e.getMessage());}return null;}} }再来测试一下自定义的序列化及反序列化方式 import com.example.websocket.config.InstantMillsTimeModule; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test;import java.time.Instant;/*** Instant Jackson测试** author yangguirong*/ Slf4j public class InstantTest {ObjectMapper objectMapper new ObjectMapper();Testvoid serializeTest() throws JsonProcessingException {objectMapper.registerModule(new JavaTimeModule());String str objectMapper.writeValueAsString(Instant.now());log.info(serialize: {}, str);// serialize: 1691208180.052185000}Testvoid deserializeTest() throws JsonProcessingException {objectMapper.registerModule(new JavaTimeModule());Instant instant objectMapper.readValue(1691208180.052185000, Instant.class);log.info(deserialize: {}, instant);// deserialize: 2023-08-05T04:03:00.052185Z}Testvoid millsSerializeTest() throws JsonProcessingException {objectMapper.registerModule(new InstantMillsTimeModule());String str objectMapper.writeValueAsString(Instant.now());log.info(millsSerializeTest: {}, str);// millsSerializeTest: 1691208541018}Testvoid millsDeserializeTest() throws JsonProcessingException {objectMapper.registerModule(new InstantMillsTimeModule());Instant instant objectMapper.readValue(1691208541018, Instant.class);log.info(millsDeserializeTest: {}, instant);// deserialize: 2023-08-05T04:09:01.018Z} }可以看到结果是符合预期的可以在毫秒时间戳和Instant之间相互转换。 在后台配置SpringBoot的时候需要考虑两种情况一种就是Instant作为RequestParam/PathVariable的情况另一种是RequestBody/ResponseBody的情况。前者借助转换器实现配置如下 import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; import org.springframework.format.FormatterRegistry; import org.springframework.util.StringUtils; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.time.Instant;/*** web mvc设置** author yangguirong*/ Configuration public class WebMvcConfig implements WebMvcConfigurer {Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(instantConvert());}public ConverterString, Instant instantConvert() {// 不能替换为lambda表达式return new ConverterString, Instant() {Overridepublic Instant convert(String source) {if (StringUtils.hasText(source)) {return Instant.ofEpochMilli(Long.parseLong(source));}return null;}};} }后者如果是局部配置则在具体的实体类属性上添加JsonSerialize和JsonDeserialize注解在注解中指定序列化器和反序列化器即可。如果是全局配置则可以按照如下方式进行配置将InstantMillsTimeModule注册为Bean这个Bean会在JacksonAutoConfiguration中的StandardJackson2ObjectMapperBuilderCustomizer被自动注入然后进行注册。 import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** Jackson配置** author yangguirong*/ Configuration AutoConfigureBefore(JacksonAutoConfiguration.class) public class JacksonCustomizerConfig {Beanpublic Jackson2ObjectMapperBuilderCustomizer jacksonModuleRegistryCustomizer() {return jacksonObjectMapperBuilder - jacksonObjectMapperBuilder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, SerializationFeature.FAIL_ON_EMPTY_BEANS);}Beanpublic InstantMillsTimeModule instantMillsTimeModule() {return new InstantMillsTimeModule();} }简单的接口测试 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*;import java.time.Instant;/*** instant测试** author yangguirong*/ Slf4j RequestMapping(instant) RestController public class InstantTestController {GetMapping(getInstant)public Instant getInstant() {return Instant.now();}PutMapping(setInstant)public void setInstant(RequestParam Instant instant) {log.info(setInstant: {}, instant);}GetMapping(getInstantDemoVO)public DemoVO getInstantDemoVO() {return new DemoVO(Instant.now());}PutMapping(setInstantDemoVO)public void setInstantDemoVO(RequestBody DemoVO vo) {log.info(setInstantDemoVO:{}, vo);}DataNoArgsConstructorAllArgsConstructorstatic class DemoVO {private Instant instant;} }
http://www.hkea.cn/news/14391032/

相关文章:

  • 网站资料上传wordpress文章中加入搜索框
  • 重庆消防网seo教程seo官网优化详细方法
  • 徐州模板建站哪家好推广一个app的费用
  • 农家乐网站开发项目背景wordpress主题瀑布流下载
  • 给公司做网站需要华多少钱系统优化app最新版
  • 如何做竞价网站数据监控我的长沙app
  • 网站开发专业职称有哪些洛阳青峰网络公司网站建设
  • 一般做兼职在哪个网站seo品牌
  • 中国空间站朋友圈柳河县建设局网站
  • 中国外贸网站大全wordpress主题 关键字代码
  • 网站建设首页怎么弄wordpress 分页太慢
  • 深圳做网站 百度智能小程序手机登录wordpress
  • 网页建站网站北京影视宣传片拍摄公司
  • 没有服务器如何做网站linux 网站301
  • 合肥浦发建设集团网站网站排名点击工具
  • 个人网站模板吧微信号注册官方网站
  • php网站源码站长工具同大全站
  • 港口建设申报网站做网站借用网络图片不违法吧
  • 企业网站建设示范平台广州软件开发招聘
  • 遵义原创网站工业软件开发技术学什么
  • 云集网站建设公司仟亿网络科技工作室
  • 安徽网站建设价格蒙牛企业网站建设(分析)与推广
  • 网站关键词 分隔网络编程课程
  • 网站注东莞网站建设手袋加工
  • 代码共享网站动漫技术制作专业
  • 企业网站报价模板下载对方把我的网站他网站内页友情链接 站长工具检测到是无反链
  • 惠州建设企业网站asp.net 如何设置网站首页
  • 湖南网站营销seo哪家好企业网站建设开发多少钱
  • 怎么做图片网站品牌宣传型网站
  • 常州网站开发电子网站建设前台设计