spring boot项目使用@JsonFormat失效问题的解决

问题描述:

问题描述:

在Spring Boot项目中,使用@JsonFormat注解时,时间格式化不起作用,导致返回的时间格式不符合要求。如何解决这一问题?

解决方案:

  1. 引入依赖

首先,在项目的pom.xml文件中,引入以下依赖:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

这个依赖会让Spring Boot的Jackson JSON处理器自动支持Java 8中的LocalDateTime、LocalDate和LocalTime等时间日期类型。

  1. 使用@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失效问题的解决

基础教程推荐