springboot3操作时间显示问题2025-12-18T14:35:36
1). 方式一 在属性上加上注解,对日期进行格式化
- package com.zidiu.entity;
-
- import com.fasterxml.jackson.annotation.JsonFormat;
- import lombok.AllArgsConstructor;
- import lombok.Builder;
- import lombok.Data;
- import lombok.NoArgsConstructor;
-
- import java.io.Serializable;
- import java.time.LocalDateTime;
-
- @Data
- @Builder
- @NoArgsConstructor
- @AllArgsConstructor
- public class Employee implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private Long id;
-
- private String username;
-
- private String name;
-
- private String password;
-
- private String phone;
-
- private String sex;
-
- private String idNumber;
-
- private Integer status;
-
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime createTime;
-
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime updateTime;
-
- private Long createUser;
-
- private Long updateUser;
-
- }
复制代码
2). 方式二(推荐 ) 在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理
- /**
- * 扩展Spring MVC框架的消息转化器
- * @param converters
- */
- protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
- log.info("扩展消息转换器...");
- //创建一个消息转换器对象
- MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
- //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
- converter.setObjectMapper(new JacksonObjectMapper());
- //将自己的消息转化器加入容器中
- converters.add(0,converter);
- }
复制代码
1,添加依赖:
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-json</artifactId>
- </dependency>
- </dependencies>
复制代码 2,添加转换器对象
- package com.zidiu.json;
-
- import com.fasterxml.jackson.databind.DeserializationFeature;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.module.SimpleModule;
- import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
- import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
- import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
- import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
- import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
- import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
-
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.time.LocalTime;
- import java.time.format.DateTimeFormatter;
-
- import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
-
- /**
- * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
- * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
- * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
- */
- public class JacksonObjectMapper extends ObjectMapper {
-
- public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
- //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
- public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
- public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
-
- public JacksonObjectMapper() {
- super();
- //收到未知属性时不报异常
- this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
-
- //反序列化时,属性不存在的兼容处理
- this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-
- SimpleModule simpleModule = new SimpleModule()
- .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
- .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
- .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
- .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
- .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
- .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
-
- //注册功能模块 例如,可以添加自定义序列化器和反序列化器
- this.registerModule(simpleModule);
- }
- }
复制代码 3,扩展Spring MVC框架的消息转化器配置
- package com.zidiu.config;
-
- import cn.hutool.core.util.RandomUtil;
- import com.zidiu.interceptor.JwtTokenInterceptor;
- import com.zidiu.json.JacksonObjectMapper;
- import io.swagger.v3.oas.models.OpenAPI;
- import io.swagger.v3.oas.models.info.Info;
- import io.swagger.v3.oas.models.info.License;
- import lombok.extern.slf4j.Slf4j;
- import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
- import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
-
- /**
- * 配置类,注册web层相关组件
- */
- @Slf4j
- @Configuration
-
- public class WebMvcConfiguration extends WebMvcConfigurationSupport {
- @Autowired
- private JwtTokenInterceptor jwtTokenInterceptor;
- /**
- * 注册自定义拦截器
- *
- * @param registry
- */
- protected void addInterceptors(InterceptorRegistry registry) {
- log.info("开始注册自定义拦截器...");
- registry.addInterceptor(jwtTokenInterceptor)
- .addPathPatterns("/admin/**")
- .excludePathPatterns("/admin/employee/login");
- }
- /**
- * 根据@Tag 上的排序,写入x-order
- *
- * @return the global open api customizer
- */
- @Bean
- public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {
- return openApi -> {
- if (openApi.getTags()!=null){
- openApi.getTags().forEach(tag -> {
- Map<String,Object> map=new HashMap<>();
- map.put("x-order", RandomUtil.randomInt(0,100));
- tag.setExtensions(map);
- });
- }
- if(openApi.getPaths()!=null){
- openApi.addExtension("x-test123","333");
- openApi.getPaths().addExtension("x-abb",RandomUtil.randomInt(1,100));
- }
-
- };
- }
-
- @Bean
- public OpenAPI customOpenAPI() {
- return new OpenAPI()
- .info(new Info()
- .title("金黑用户系统API")
- .version("1.0")
-
- .description( "Knife4j集成springdoc-openapi示例")
- .termsOfService("http://doc.xiaominfo.com")
- .license(new License().name("Apache 2.0")
- .url("http://doc.xiaominfo.com")));
- }
-
- /**
- * 扩展Spring MVC框架的消息转化器
- * @param converters
- */
- protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
- log.info("扩展消息转换器...");
- //创建一个消息转换器对象
- MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
- //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
- converter.setObjectMapper(new JacksonObjectMapper());
- //将自己的消息转化器加入容器中
- converters.addFirst(converter);
- }
-
- }
复制代码 干货源代码下载:
jinhei-waimai.zip
(272.7 KB, 下载次数: 0, 售价: 50 金币)
SpringBoot3+SSM的企业级Java项目实战之外卖小程序
|