怎么做出有品牌感的网站分析不同网站的优缺点

news/2025/9/24 4:43:09/文章来源:
怎么做出有品牌感的网站,分析不同网站的优缺点,苏宁易购网站建设的不足之处,大型电子商务系统网站建设文章目录 前言一、为什么推荐使用java.time包的LocalDateTime而不是java.util的Date#xff1f;二、使用LocalDateTime和LocalDate时遇到了哪些坑#xff1f;2.1 Redis序列化报错2.1.1 问题现象2.1.2 问题分析2.1.3 解决方案 2.2 LocalDateTime和LocalDate类型的属性返回给前… 文章目录 前言一、为什么推荐使用java.time包的LocalDateTime而不是java.util的Date二、使用LocalDateTime和LocalDate时遇到了哪些坑2.1 Redis序列化报错2.1.1 问题现象2.1.2 问题分析2.1.3 解决方案 2.2 LocalDateTime和LocalDate类型的属性返回给前端的值格式不正确2.2.1 问题现象2.2.2 解决方案 三、总结 前言 近日心血来潮想做一个开源项目目标是做一款可以适配多端、功能完备的模板工程包含后台管理系统和前台系统开发者基于此项目进行裁剪和扩展来完成自己的功能开发。 本项目基于Java21和SpringBoot3开发序列化工具使用的是默认的Jackson使用Spring Data Redis操作Redis缓存。 在定义实体类过程中日期时间类型的属性我使用了java.time包下的LocalDate和LocalDateTime类而没有使用java.util包下的Date类。 但在使用过程中遇到了一些问题于是在此记录下来与诸位分享。 一、为什么推荐使用java.time包的LocalDateTime而不是java.util的Date LocalDateTime和Date是Java中表示日期和时间的两种不同的类它们有一些区别和特点。 类型LocalDateTime是Java 8引入的新类型属于Java 8日期时间APIjava.time包。而Date是旧版Java日期时间APIjava.util包中的类。不可变性LocalDateTime是不可变的类型一旦创建后其值是不可变的对该类对象的加减等计算操作不会修改原对象而是会返回一个新的LocalDateTime对象。而Date是可变的类型可以通过方法修改其值。线程安全性LocalDateTime是线程安全的多个线程可以同时访问和操作不同的LocalDateTime实例。而Date是非线程安全的如果多个线程同时访问和修改同一个Date实例可能会导致不可预期的结果。时间精度LocalDateTime提供了纳秒级别的时间精度可以表示更加精确的时间。而Date只能表示毫秒级别的时间精度。时区处理LocalDateTime默认不包含时区信息表示的是本地日期和时间。而Date则包含时区信息它的实际值会受到系统默认时区的影响。 由于LocalDateTime是Java 8及以上版本的新类型并提供了更多的功能和灵活性推荐在新的项目中使用LocalDateTime来处理日期和时间。 对于旧版Java项目仍然需要使用Date类但在多线程环境下需要注意其线程安全性。 如果需要在LocalDateTime和Date之间进行转换可以使用相应的方法进行转换例如通过LocalDateTime的atZone()方法和Date的toInstant()方法进行转换。 二、使用LocalDateTime和LocalDate时遇到了哪些坑 2.1 Redis序列化报错 2.1.1 问题现象 在使用RedisTemplate向Redis中插入数据时遇到了如下报错 2024-01-11T21:33:25.23308:00 ERROR 13212 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exceptionorg.springframework.data.redis.serializer.SerializationException: Could not write JSON: Java 8 date/time type java.time.LocalDateTime not supported by default: add Module com.fasterxml.jackson.datatype:jackson-datatype-jsr310 to enable handling (through reference chain: java.util.ArrayList[0]-com.fast.alden.data.model.SysApiResource[createdTime])at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.serialize(Jackson2JsonRedisSerializer.java:157) ~[spring-data-redis-3.2.0.jar:3.2.0]at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:128) ~[spring-data-redis-3.2.0.jar:3.2.0]at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:236) ~[spring-data-redis-3.2.0.jar:3.2.0]2.1.2 问题分析 在使用Redis缓存含有LocalDateTime类型变量的实体类时会产生序列化问题因为Jackson库在默认情况下不支持Java8的LocalDateTime类型的序列化和反序列化。 错误堆栈中也给出了解决方案添加 com.fasterxml.jackson.datatype:jackson-datatype-jsr310依赖但光添加依赖是不够的还我们需要自定义序列化和反序列化的行为。 2.1.3 解决方案 添加maven依赖 dependencygroupIdcom.fasterxml.jackson.datatype/groupIdartifactIdjackson-datatype-jsr310/artifactIdversion2.13.0/version /dependency修改RedisSerializer Bean配置 在定义RedisSerializer Bean的代码中自定义ObjectMapper对象处理时间属性时的序列化和反序列化行为LocalDate、LocalDateTime、LocalTime的序列化和反序列化都要自定义还要禁用将日期序列化为时间戳。 Configuration public class RedisConfig {Beanpublic RedisSerializerObject redisSerializer() {ObjectMapper objectMapper new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 必须设置否则无法将JSON转化为对象会转化成Map类型objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);// 自定义ObjectMapper的时间处理模块JavaTimeModule javaTimeModule new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd)));javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(yyyy-MM-dd)));javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(HH:mm:ss)));javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(HH:mm:ss)));objectMapper.registerModule(javaTimeModule);// 禁用将日期序列化为时间戳的行为objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);//创建JSON序列化器return new Jackson2JsonRedisSerializer(objectMapper, Object.class);} }2.2 LocalDateTime和LocalDate类型的属性返回给前端的值格式不正确 2.2.1 问题现象 在application.yml中设置了全局的日期类型的序列化和反序列化格式在对应字段上也并没有使用JsonFormat进行特殊设置但是LocalDateTime类型的属性返回给前端时并没有生效返回的仍是LocalDateTime默认的ISO标准时间格式的字符串。 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8default-property-inclusion: alwaysmvc:format:date-time: yyyy-MM-dd HH:mm:ssdate: dd/MM/yyyy2.2.2 解决方案 自定义Jackson配置代码如下 Configuration public class JacksonConfig {Beanpublic Jackson2ObjectMapperBuilderCustomizer customizer() {return builder -builder.simpleDateFormat(yyyy-MM-dd HH:mm:ss)// long类型转string 前端处理Long类型数值过大会丢失精度.serializerByType(Long.class, ToStringSerializer.instance).serializerByType(Long.TYPE, ToStringSerializer.instance).serializationInclusion(JsonInclude.Include.NON_NULL)//指定反序列化类型也可以使用JsonFormat(pattern yyyy-MM-dd)替代。主要是mvc接收日期时使用.deserializerByType(LocalTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(HH:mm:ss))).deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(yyyy-MM-dd))).deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)))// 日期序列化主要返回数据时使用.serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(HH:mm:ss))).serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd))).serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));} }三、总结 在使用java.time API的过程中除了会遇到前文所说的序列化问题之外可能还会遇到以下问题 时区问题LocalDateTime不包含时区信息这可能导致在不同时区的用户之间出现不一致性。为了避免这个问题您应该考虑使用ZonedDateTime或OffsetDateTime并确保在处理日期和时间时考虑时区。数据库交互当与数据库交互时要确保数据库列的数据类型与正在使用的Java日期类型相匹配。例如如果使用的是PostgreSQL则可能需要使用timestamp without time zone列类型来存储日期和时间。默认值和验证在某些情况下可能希望为日期或时间字段设置默认值或进行验证。使用Spring的验证注解如NotNull或Size可以帮助我们确保输入的有效性。跨时区处理由于LocalDateTime不包含时区信息当与全球用户互动时需要特别注意时区转换。考虑使用像Joda-Time这样的库来帮助我们处理复杂的时区转换。处理过去和未来的日期在处理历史事件或计划未来的活动时请确保我们的应用程序能够正确地处理这些日期。考虑使用像Period或Duration这样的类来计算日期之间的差异。 我也会及时的更新后续实践中所遇到的问题希望与诸位看官一起进步。 如有错误还望批评指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大良营销网站建设咨询阿里云 rds wordpress

使用 Service 把前端连接到后端 如何创建前端(Frontend)微服务和后端(Backend)微服务。后端微服务是一个 hello 欢迎程序。 前端通过 nginx 和一个 Kubernetes 服务暴露后端所提供的服务。 使用部署对象(Deployment ob…

苏州企业建设网站网站建设卖点

useInperativeHandle是通过ref暴露子组件中的方法 1.场景说明-直接调用子组件内部的方法 import { forwardRef, useImperativeHandle, useRef } from "react"// 子组件const Son forwardRef((props, ref) > {// 实现聚焦逻辑const inputRef useRef(null)const …

网站收录 作用wordpress博客视频教程

欢迎您成为我的读者,希望这篇文章能给你一些帮助。前言今天咱们一起来看看在C#中如何使用NPOI第三方控件进行数据的导出。关于NPOI插件网上资料很多,大家感兴趣的可以去看看。本文使用的版本是NPOI 2.5.1。大家可在包管理器NuGet或者下面网址进行下载。h…

阿里巴巴个人网站怎么做个人网站建设的步骤

Linux mren命令介绍 mren(全称multiple rename),它是用来对多个文件进行重命名的工具。这个命令在一次操作中可以批量改变多个文件的名称,特别是在需要对大量文件进行重命名时,mren将节省大量的时间和努力。 Linux m…

无锡建设网站制作垂直型电商网站如何做

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

如何看网站的建站时间企业网站 手机站

文章目录 基于pytorch的LSTM进行字符集文本生成前言一、数据集二、代码实现 1.到入库和LSTM进行模型构建2.数据预处理函数3.训练函数4.预测函数5.文本生成函数6.主函数完整代码总结 前言 本文介绍了机器学习中深度学习的内容使用pytorch构建LSTM模型进行字符级文本生成任务 一…

怎么创建自己的网站临海建设规划信息网网站

前端实现获取后端返回的文件流并下载 方法一:使用Axios实现文件流下载优点缺点 方法二:使用封装的Request工具实现文件流下载优点缺点 方法三:直接通过URL跳转下载优点缺点 结论 在前端开发中,有时需要从后端获取文件流&#xff0…

重庆市有网站设计维护四川手机网站设计方案

树型结构 树的概念 树是一种非线性结构,他是由n(n>0)个有限结点组成的一个具有层次关系的集合。 当n0时,该树为空树。 在任意一个非空树中都满足以下条件: 1、有一个特殊的结点,称为根结点&#xff0c…

wordpress付费站内搜索零基础网站开发要学多久

一 中断 中断,即cpu暂停执行当前程序,转而执行另外一段特殊程序,处理结束后。返回之前暂停程序继续执行。 中断向量,中断服务程序的入口地址,每个中断源都对应一个固定的入口地址。 中断服务函数,内核响应中…

中国建设银行青海省分行网站怎么建立网站 个人热点

目录 获取token1. base64 用户名 密码2. 先请求要请求的接口3. 请求接口 auth4. 拿着 token, 去请求接口 请求 tag 列表接口1. 去请求token2. 拿着token去请求 镜像 tag 列表 删除镜像1. 先获取镜像 tag 的 sha2562. 删除镜像 错误: {"errors":[{"code":&q…

关于网站集约化建设公函分析网站外链分析工具

物联网网关作为连接设备与云端的桥梁,承担着采集数据、设备远程控制、协议转换、数据传输等重要任务。物联网网关是一种网络设备,它可以连接多个物联网设备,实现设备之间的数据传输和通信。物联网网关通常具有较高的网络带宽和处理能力&#…

打开网站后直接做跳转页面吗吉林网站制作

1. RTC 基本介绍 RTC(Real Time Clock) 即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电 2. RTC 控制器 2.1 RTC的特点是:…

做网站找哪家又便宜又好个人站长做什么网站好

对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制。当错误发生时,我们必须做好两件事情:一是将错误信息记录日志,发邮件通知网站维护人员,方便技术人员对错误进行跟…

做网站设计哪家好专做美妆的网站

从ORALE 10GR2开始出现透明数据加密技术(Transparent Data Encryption,TDE)TDE用来对数据加密,通常 SQL 执行的应用程序逻辑不需要进行更改,仍能正常运行。 换言之,应用程序可以使用同一语法将数据插入到应用程序表中,…

学做网站记不住代码我要自学网免费视频教程

使用TagList http://blog.csdn.net/fbfsber008/article/details/7044723 转载于:https://www.cnblogs.com/tiantao/p/2389126.html

定制网站制作公司有哪些无锡软件网站开发公司

删除mysql表(用的是innodb)时没有用drop table命令,只是简单删除表目录,这导致表空间还存在,这样就不可以加同名表进去。当要重新导入新的同名表或者创建新的同名表时,会提示错误Error : Tablespace for ta…

北京丰台网站建设公司网络策略

大家好,我是洋子。今年的春招很多企业已经开始招聘了,像美团今年继续发力,24届春招以及25届暑期转正实习一共招聘4000人。另外,阿里,京东,顺丰等公司也已经开始春招,可以说招聘的号角已经正式吹…

沅江网站制作怎样制作游戏app软件

1.第 N 个泰波那契数 题目连接:1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

营销型网站建设比较好慕课网站开发

aws日志通2.0 实现全面的日志管理和分析功能 一体化日志摄取 :把aws服务器日志和应用日志传输到opensearch域中无代码日志处理 :在网页控制台中就可以实现数据处理开箱即用 :提供可视化模版(nginx、HTTP server ) 架构…

网站怎么做图片动态图片大全wordpress网站很慢

作者:木木匠 http://my.oschina.net/luozhou/blog/3088908前言我们知道 SpringBoot 给我们带来了一个全新的开发体验,我们可以直接把 web 程序达成 jar 包,直接启动,这就得益于 SpringBoot 内置了容器,可以直接启动&am…