首页 > 解决方案 > 格式化程序没有在 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"
 }

标签: javaspringspring-boot

解决方案


您甚至可能不需要实现格式化并注册它。只需如下注释您的 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


推荐阅读