java - 格式化程序没有在 REST 应用程序中注册 Spring Boot 容器
问题描述
我在 REST Spring Boot Web 服务应用程序中实现了一个格式化程序来格式化所有 LocalDateTime (Java 8) 属性,以便它们在 Web 服务响应中以特定格式显示。
public class LocalDateTimeFormatter implements Formatter<LocalDateTime> {
@Override
public String print(LocalDateTime temporal, Locale locale) {
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss");
return formatter.format(temporal);
}
@Override
public LocalDateTime parse(String text, Locale locale)
throws ParseException {
return LocalDateTime.parse(text);
}
}
格式化程序也已注册,如下所示,以便它在应用程序级别工作,以避免单独注释所有 LocalDateTime 属性
@Configuration
public class ContentFormatter implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new LocalDateTimeFormatter());
}
}
但是没有格式应用于来自 Web 服务的响应,accessDate 是 LocalDateTime 类型的属性
{
"content" : "Hello, World!",
"id" : 0,
"accessDate" : "2020-04-07T19:56:41.48"
}
解决方案
您甚至可能不需要实现格式化并注册它。只需如下注释您的 LocalDateTime 属性:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
public LocalDateTime getTime() {
return time;
}
此外,您可能需要添加以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.6.0</version>
</dependency>
有关详细信息,请参阅此问题及其答案: Spring Data JPA - ZonedDateTime format for json serialization
推荐阅读
- angular - 使用 ng2 离子范围滑块美化值 - 角度
- c - 在存储在 const 字符数组中之前修改字符串
- python - 编码和解码 UTF-8 的问题
- angular - ng-drag-drop 从源列表中删除拖动数据
- java - 如果在使用 Selenium 等待一定时间后无法加载(get(url)),如何自动刷新页面
- reporting-services - SSDT 图表在 Designer 预览中可见,但在部署到 SSRS 时消失
- javascript - SequelizeJS 映射在第 1000 个循环时停止
- javascript - JQuery 在 Asp.net 中禁用动态创建的 Html 按钮
- python - 如何在 Tensorflow 中使用带有迭代器的 tf.datasets
- activerecord - Yii - 查找相关记录为零的记录