public static void addApplicationConverters(ConverterRegistry registry) {
addDelimitedStringConverters(registry);
registry.addConverter(new StringToDurationConverter());
registry.addConverter(new DurationToStringConverter());
registry.addConverter(new NumberToDurationConverter());
registry.addConverter(new DurationToNumberConverter());
registry.addConverter(new StringToDataSizeConverter());
registry.addConverter(new NumberToDataSizeConverter());
registry.addConverter(new StringToFileConverter());
registry.addConverterFactory(new LenientStringToEnumConverterFactory());
registry.addConverterFactory(new LenientBooleanToEnumConverterFactory());
public static void addDelimitedStringConverters(ConverterRegistry registry) {
ConversionService service = (ConversionService)registry;
registry.addConverter(new ArrayToDelimitedStringConverter(service));
registry.addConverter(new CollectionToDelimitedStringConverter(service));
registry.addConverter(new DelimitedStringToArrayConverter(service));
registry.addConverter(new DelimitedStringToCollectionConverter(service));
首先第一点需要知道的是springboot默认依赖的json框架是jackson。当使用@ResponseBody注解返回json格式数据时就是该框架在起作用。如果字段属性是Date而非LocalDateTime时,通常我们会在application.properties里面配置如下:spring.mvc.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-
项目我们经常会有前后端时间转换的场景,比如:创建时间、更新时间等。一般情况下,前后端使用时间戳或者年月日的格式进行传递。
如果后端收到了前端的参数每次都手动转化为想要的格式,后端每次将数据传给前端时都手动处理为想要的格式实在是太麻烦了。
基于如上原因,本文用示例介绍SpringBoot全局格式配置,将前端传过来的时间自动转化为LocalDateTime。(本文只介绍年月日格式的转化方法,例如:2021-09-16 21:13:21 => LocalDate.........
1.标准日期格式转换
本类型是指前端传递类似"yyyy-MM-dd HH:mm:ss"格式字符串,后端以 LocalDateTime类型接收。
spring默认的使用jackson,故添加maven依赖,可参考官方文档:
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names
LocalDateTime 作为 Controller 的参数
LocalDateTime 是某实体类的字段,实体类作为 Controller 的参数
LocalDateTime 作为 Controller 的返回值
LocalDateTime 是某实体类的字段,实体类作为 Controller 的返回值
@RestController
public class TestController {
@GetMap
项目我们经常会有前后端时间转换的场景,比如:创建时间、更新时间等。一般情况下,前后端使用时间戳或者年月日的格式进行传递。
如果后端收到了前端的参数每次都手动转化为想要的格式,后端每次将数据传给前端时都手动处理为想要的格式实在是太麻烦了。
基于如上原因,本文介绍可以方便地进行格式自动转化的配置方案,后端用的是SpringBoot,时间类型用的是LocalDateTime。
有人说,可以这样配置:
spring:............
在项目中日期格式化是最常见的问题,之前涉及的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,非线程安全,对日期的计算方式繁琐,而且容易出错,因为月份是从0开始的,从 Calendar 中获取的月份需要加一才能表示当前月份。
在 JDK8 中,一个新的重要特性就是引入了全新的时间和日期API,它被收录在 java.time 包中,借助新的时间和日期API可以以更简洁的方法处理时间和日期。
在项目中日期格式化是最常见的问题,之前涉及的java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,非线程安全,对日期的计算方式繁琐,而且容易出错,因为月份是从0开始的,从 Calendar 中获取的月份需要加一才能表示当前月份。
在 JDK8 中,一个新的重要特性就是引入了全新的时间和日期API,它被收录在 java.time 包中,借助新的时间和日期API可以以更简洁的方法处理时间和日期。
(1)@JsonFormat和@Date...
Springboot 格式化LocalDateTime
我们知道在
springboot中有默认的json
解析器,
Spring Boot 中默认使用的 Json
解析技术框架是 jackson。我们点开 pom.xml
中的
spring-
boot-starter-web 依赖,可以看到一个
spring-
boot-starter-json依赖:
其实引不引入这个依赖都一样
spring-
boot-starter-web 里面就包含这个依赖
就是为了让你们理解是这个依赖在发挥作用
在Spring Boot 2.5.6中,如果使用`LocalDateTime`进行时间格式化,在默认情况下会得到带有字母T的时间字符串,如:“2021-11-23T12:34:56”。这是因为ISO日期时间格式中的日期和时间部分之间需要使用大写字母T进行分隔,以表示时间的开始。
为了解决这个问题,可以使用Java 8的时间API中的`DateTimeFormatter`进行时间格式化,并将格式化模式设置为“yyyy-MM-dd HH:mm:ss”,其中日期和时间之间用空格代替使用字母T。可以在Spring Boot的配置文件中设置格式化模式,例如在`application.properties`文件中添加以下配置:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
其中`spring.jackson.date-format`用于设置日期格式化模式,`spring.jackson.time-zone`用于设置时区。在这个例子中,将格式化模式设置为“yyyy-MM-dd HH:mm:ss”会将时间字符串格式化为“2021-11-23 12:34:56”,不再带有字母T。
如果不想添加上述配置,还可以在实体类中为`LocalDateTime`字段添加`@JsonFormat`注解,例如:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
这样,在序列化该实体类为JSON字符串时,该字段的值也将格式化为“yyyy-MM-dd HH:mm:ss”,不再带有字母T。