From 5b096d27e17f2229d9cde84ef3c0757ba07e29bc Mon Sep 17 00:00:00 2001 From: Guwan Date: Sat, 7 Dec 2024 18:52:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E5=AE=9E=E7=8E=B0=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++- .../backend/Handler/MyMetaObjectHandler.java | 4 +- .../backend/config/JacksonConfiguration.java | 44 ------------------- .../backend/config/MvcConfiguration.java | 27 ------------ .../com/guwan/backend/config/RedisConfig.java | 25 +++++++++++ .../backend/controller/UserController.java | 13 ++---- .../com/guwan/backend/dto/user/UserDTO.java | 14 +++--- .../java/com/guwan/backend/entity/User.java | 5 +-- .../backend/service/impl/UserServiceImpl.java | 6 +-- 9 files changed, 45 insertions(+), 99 deletions(-) delete mode 100644 src/main/java/com/guwan/backend/config/JacksonConfiguration.java delete mode 100644 src/main/java/com/guwan/backend/config/MvcConfiguration.java diff --git a/pom.xml b/pom.xml index 5f88f41..f2350e5 100644 --- a/pom.xml +++ b/pom.xml @@ -135,11 +135,13 @@ - org.springframework.boot - spring-boot-starter-json + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.15.3 + com.alibaba fastjson diff --git a/src/main/java/com/guwan/backend/Handler/MyMetaObjectHandler.java b/src/main/java/com/guwan/backend/Handler/MyMetaObjectHandler.java index 16c5957..94ee477 100644 --- a/src/main/java/com/guwan/backend/Handler/MyMetaObjectHandler.java +++ b/src/main/java/com/guwan/backend/Handler/MyMetaObjectHandler.java @@ -10,11 +10,11 @@ import java.util.Date; public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { - this.strictInsertFill(metaObject, "createdTime", Date.class, new Date()); + this.strictInsertFill(metaObject, "createdTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { - this.strictUpdateFill(metaObject, "lastLoginTime", Date.class, new Date()); + this.strictUpdateFill(metaObject, "lastLoginTime", LocalDateTime.class, LocalDateTime.now()); } } \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/config/JacksonConfiguration.java b/src/main/java/com/guwan/backend/config/JacksonConfiguration.java deleted file mode 100644 index fc3fb66..0000000 --- a/src/main/java/com/guwan/backend/config/JacksonConfiguration.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.guwan.backend.config; - - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -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 com.fasterxml.jackson.module.paramnames.ParameterNamesModule; -import com.guwan.backend.constant.Constants; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; - -@Configuration -public class JacksonConfiguration { - - @Bean - public ObjectMapper objectMapper(){ - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); - JavaTimeModule javaTimeModule = new JavaTimeModule(); - - javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_TIME_FORMAT))); - javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_FORMAT))); - javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_TIME_FORMAT))); - - javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_TIME_FORMAT))); - javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_FORMAT))); - javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_TIME_FORMAT))); - objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule()); - return objectMapper; - } -} diff --git a/src/main/java/com/guwan/backend/config/MvcConfiguration.java b/src/main/java/com/guwan/backend/config/MvcConfiguration.java deleted file mode 100644 index 782bc05..0000000 --- a/src/main/java/com/guwan/backend/config/MvcConfiguration.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.guwan.backend.config; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -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.WebMvcConfigurer; - -import java.util.List; - -@Configuration -public class MvcConfiguration implements WebMvcConfigurer { - @Override - public void extendMessageConverters(List> converters) { - MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - objectMapper.registerModule(new JavaTimeModule()); - messageConverter.setObjectMapper(objectMapper); - converters.add(0, messageConverter); - } -} diff --git a/src/main/java/com/guwan/backend/config/RedisConfig.java b/src/main/java/com/guwan/backend/config/RedisConfig.java index 4764f72..ce86caa 100644 --- a/src/main/java/com/guwan/backend/config/RedisConfig.java +++ b/src/main/java/com/guwan/backend/config/RedisConfig.java @@ -4,6 +4,15 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +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 com.fasterxml.jackson.module.paramnames.ParameterNamesModule; +import com.guwan.backend.constant.Constants; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; @@ -17,6 +26,10 @@ import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; @Configuration @EnableCaching @@ -31,6 +44,18 @@ public class RedisConfig { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); + + JavaTimeModule javaTimeModule = new JavaTimeModule(); + + javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_TIME_FORMAT))); + javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_FORMAT))); + javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_TIME_FORMAT))); + + javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_TIME_FORMAT))); + javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_DATE_FORMAT))); + javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DateTime.DEFAULT_TIME_FORMAT))); + mapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule()); + jackson2JsonRedisSerializer.setObjectMapper(mapper); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); diff --git a/src/main/java/com/guwan/backend/controller/UserController.java b/src/main/java/com/guwan/backend/controller/UserController.java index 15f1fe6..616c5c7 100644 --- a/src/main/java/com/guwan/backend/controller/UserController.java +++ b/src/main/java/com/guwan/backend/controller/UserController.java @@ -8,21 +8,14 @@ import com.guwan.backend.service.EmailService; import com.guwan.backend.service.UserService; import com.guwan.backend.util.RedisUtils; import com.guwan.backend.util.SmsUtils; -import com.guwan.backend.vo.user.LoginRequest; -import com.guwan.backend.vo.user.RegisterRequest; -import com.guwan.backend.vo.user.EmailRegisterRequest; -import com.guwan.backend.vo.user.PhoneRegisterRequest; import jakarta.validation.Valid; -import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Email; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.validation.constraints.Email; import org.thymeleaf.context.Context; -import java.util.Map; - @Slf4j @RestController @RequestMapping("/api/user") @@ -50,10 +43,10 @@ public class UserController { } @PostMapping("/login") - public Result login(@RequestBody @Valid LoginDto request) { + public Result login(@RequestBody @Valid LoginDto request) { try { log.info("用户登录: {}", request.getUsername()); - return Result.success("登录成功", userService.login(request)); + return Result.success("登录成功", userService.login(request).getToken()); } catch (IllegalArgumentException e) { return Result.unauthorized(e.getMessage()); } catch (Exception e) { diff --git a/src/main/java/com/guwan/backend/dto/user/UserDTO.java b/src/main/java/com/guwan/backend/dto/user/UserDTO.java index 99f0528..78f7704 100644 --- a/src/main/java/com/guwan/backend/dto/user/UserDTO.java +++ b/src/main/java/com/guwan/backend/dto/user/UserDTO.java @@ -1,15 +1,10 @@ package com.guwan.backend.dto.user; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import java.util.Date; @Data public class UserDTO { @@ -21,9 +16,12 @@ public class UserDTO { private String phone; private Integer gender; private String bio; - - private Date createdTime; - private Date lastLoginTime; + @DateTimeFormat //此注解用来接收字符串类型的参数封装成LocalDateTime类型 + @JsonFormat //此注解将date类型数据转成字符串响应出去 + private LocalDateTime createdTime; + @DateTimeFormat + @JsonFormat + private LocalDateTime lastLoginTime; private Integer status; private String token; } \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/entity/User.java b/src/main/java/com/guwan/backend/entity/User.java index c5fe143..235d4f5 100644 --- a/src/main/java/com/guwan/backend/entity/User.java +++ b/src/main/java/com/guwan/backend/entity/User.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.time.LocalDateTime; -import java.util.Date; @Data @TableName("user") @@ -30,10 +29,10 @@ public class User { @TableField(fill = FieldFill.INSERT) - private Date createdTime; + private LocalDateTime createdTime; @TableField(fill = FieldFill.INSERT_UPDATE) - private Date lastLoginTime; + private LocalDateTime lastLoginTime; private Integer status; } \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/service/impl/UserServiceImpl.java b/src/main/java/com/guwan/backend/service/impl/UserServiceImpl.java index 3c59955..82be70d 100644 --- a/src/main/java/com/guwan/backend/service/impl/UserServiceImpl.java +++ b/src/main/java/com/guwan/backend/service/impl/UserServiceImpl.java @@ -12,7 +12,8 @@ import com.guwan.backend.service.VerificationService; import com.guwan.backend.util.JwtUtil; import com.guwan.backend.util.RedisUtil; import com.guwan.backend.util.RedisUtils; -import com.guwan.backend.vo.user.*; +import com.guwan.backend.vo.user.EmailRegisterRequest; +import com.guwan.backend.vo.user.PhoneRegisterRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -21,7 +22,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.util.Date; import java.util.concurrent.TimeUnit; @Slf4j @@ -133,7 +133,7 @@ public class UserServiceImpl implements UserService { // 更新最后登录时间 - user.setLastLoginTime(new Date()); + user.setLastLoginTime(LocalDateTime.now()); userMapper.updateById(user); UserDTO userDTO = convertToDTO(user);