问题描述:
在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失效问题的解决 - Python技术站