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

做网站得叫什么软件百度快速排名技术培训

做网站得叫什么软件,百度快速排名技术培训,房地产微网站模板,网上书店网站建设毕业设计范文在部分场景中,后台的时间属性用的不是Date或Long,而是Instant,Java8引入的一个精度极高的时间类型,可以精确到纳秒,但实际使用的时候不需要这么高的精确度,通常到毫秒就可以了。 而在前后端传参的时候需要…

在部分场景中,后台的时间属性用的不是Date或Long,而是Instant,Java8引入的一个精度极高的时间类型,可以精确到纳秒,但实际使用的时候不需要这么高的精确度,通常到毫秒就可以了。

而在前后端传参的时候需要对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 JsonSerializer<Instant> {@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 JsonDeserializer<Instant> {@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 Converter<String, Instant> instantConvert() {// 不能替换为lambda表达式return new Converter<String, 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);}@Data@NoArgsConstructor@AllArgsConstructorstatic class DemoVO {private Instant instant;}
}
http://www.yayakq.cn/news/975863/

相关文章:

  • 公司网站设计定制网页设计入门首先要学什么
  • 湖南衡阳市建设工程造价网站阿里云空间做网站
  • 门户网站制作哪专业宁波seo排名方案优化公司
  • 哪些网站可以在线做动图wordpress分页阅读
  • 有什么彩票网站做代理好点可以通过哪些网站注册域名
  • 外贸做中英文网站中国建设银行网站地址
  • 做外贸的免费网站网络推广服务平台
  • 网站建设所需要的东西西宁手机网站建设
  • 仿牌外贸网站建设减压轻松网站开发
  • 网站外链建设工作计划如何做中介网站
  • asp网站开发技术网站备案服务
  • 沈阳学网站制作学校定制家具网站建设
  • 网站改版提升总结设计师用的素材网站有哪些
  • 网站开发服务费计入哪项费用wordpress中文章
  • 正能量网站下载购物网站开发模板
  • 怎么建立自己的公司网站公司展示类网站模板
  • wordpress网站变灰电脑网站做淘宝客
  • 深圳网站建设需要多少费用医院网站建设招标
  • 怎么让学生在网站上做问卷调查门户网站设计与开发
  • 企业没有网站怎样做推广方案现在流行的网站开发
  • 郑州中小企业网站制作二类电商用网站怎么做H5页面
  • 厦门网站建设公司哪家好WordPress支持多少文章
  • 网站建设的维护宁波模板开发建站
  • 企业做网站需要什么条件莱芜网站优化怎么做
  • 企业不建立网站吗wordpress调用特色
  • 济南英文网站建设深圳品牌网站制作平台
  • 类似于wordpress的网站吗六安seo地址
  • 三九集团如何进行网站建设成都网站创建
  • 荣县规划和建设局网站是想建个网站 用本地做服务器
  • seo优秀网站分析怎么做线上销售