java - Formatter<LocalDateTime> 未在 REST 应用程序中向 Spring Boot 容器注册

标签 java spring 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

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

相关文章:

java - 运行和调试程序 Java、Eclipse 的不同行为

java - 为什么调用我的 bean 中的 @Autowired 字段会返回 null?

java - 无法在 GAE HR 数据存储上启动 Spring MVC 3.0 应用程序,但可以在主/从属上运行

Spring boot Rest API,Angular 6 SSO 社交登录

java - 为什么用@Transactional 注释的方法必须是可覆盖的

java - 使用自定义版本 ID 将对象上传到 Amazon S3

java - Spring @PageableDefault 默认方向在传递排序后发生变化

java - Eclipse Maven Spring : Server Error when I try to Run As Server (Tomcat 7)

java - 根据 application.yml 中的属性使用 Spring Boot 进行注入(inject)

spring websocket 与 spring security 启动失败, "No bean named ' stompWebSocketHandlerMapping'已定义'