问题描述:
问题描述:
在Spring Boot项目中,使用@JsonFormat注解时,时间格式化不起作用,导致返回的时间格式不符合要求。如何解决这一问题?
解决方案:
- 引入依赖
首先,在项目的pom.xml文件中,引入以下依赖:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
这个依赖会让Spring Boot的Jackson JSON处理器自动支持Java 8中的LocalDateTime、LocalDate和LocalTime等时间日期类型。
- 使用@JsonFormat注解
在需要格式化的属性上添加@JsonFormat注解,并指定相应的日期时间格式,如下所示:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
其中,pattern属性指定日期时间格式,timezone属性指定时区。
完成上述步骤后,就可以在返回JSON数据时正确地格式化日期时间了。
示例说明:
我们可以创建一个实体类,添加一个LocalDateTime类型属性,并用@JsonFormat注解对其进行格式化配置。具体代码如下:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class User {
private Long id;
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
}
然后,创建一个RestController,返回上述实体类,并添加一些测试数据。具体代码如下:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setId(1L);
user1.setName("张三");
user1.setCreateTime(LocalDateTime.now());
userList.add(user1);
User user2 = new User();
user2.setId(2L);
user2.setName("李四");
user2.setCreateTime(LocalDateTime.now());
userList.add(user2);
return userList;
}
}
最后,启动应用程序,访问http://localhost:8080/users,即可查看到正确格式化的日期时间数据。
另外,还可以使用全局的日期时间格式化配置,配置方式如下所示:
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));
}
}
这里我们使用了WebMvcConfigurer接口,实现addFormatters方法,注册了一个DateFormatter并指定日期时间格式。完成上述配置后,就可以在整个应用程序中自动格式化日期时间了。注意,该方法需要在Spring Boot 2.1之前的版本中使用。在Spring Boot 2.1之后的版本中,需要使用以下方法进行全局日期时间格式化配置:
@Configuration
public class AppConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
return builder -> {
builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
};
}
}
再次启动应用程序,即可看到正确格式化的日期时间数据。
本文标题为:spring boot项目使用@JsonFormat失效问题的解决
基础教程推荐
- JSP组件commons-fileupload实现文件上传 2023-08-02
- java – 为什么String.intern()在Oracle JDK 1.7中的行为有所不同? 2023-11-10
- Spring Boot 使用 Disruptor 做内部高性能消息队列 2022-12-11
- 理解Java核心技术卷一第十一版 2023-10-08
- JSP实用教程之简易页面编辑器的实现方法(附源码) 2023-08-01
- Java实现注册登录跳转 2023-01-13
- SpringMVC超详细讲解视图和视图解析器 2023-01-24
- 关于@ConditionalOnProperty的作用及用法说明 2023-01-02
- MyBatis多对多关联映射创建示例 2022-12-07
- Java聊天室之实现使用Socket传递音频 2023-06-23