我在 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
关于java - Formatter<LocalDateTime> 未在 REST 应用程序中向 Spring Boot 容器注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61082383/