gpt4 book ai didi

java - @EnableWebMvc 以数组格式显示日期

转载 作者:行者123 更新时间:2023-12-02 19:10:26 25 4
gpt4 key购买 nike

我们在 spring boot 上有两个应用程序。一个是基于 spring rest api 的,第二个是基于 spring MVC 的。

由于某些业务原因,我们已经对这两个应用程序进行了合并,因为上下文相同并且一切正常,除了 java.time.LocalDateTime 格式由 spring 在 rest API 上自动执行。以前它将 LocalDateTime 格式化为“2018-08-30T18:13:24”但合并后显示为 [2018年,08,30,18,13、24],

我发现 @EnableWebMVC 注释是罪魁祸首,但删除该注释后,web-mvc 页面无法正常工作。

我应该怎么做才能使日期以 ISO(字符串)格式显示并查看解析器和 jsp 页面正常工作?

请帮忙谢谢

最佳答案

每个人都在说@EnableWebMvc 是罪魁祸首。但是,没有人说 WebMvc 如何解决这个问题。

所以,要回答这个问题,是的,有一种方法可以通过不删除 @EnableWebMvc 来解决这个问题。

在进入答案之前,让我们先了解几个概念:

  • HttpMessageConverters -> 这些是将 Java 对象与 JSON/XML 相互转换的工具
  • 默认情况下,Spring boot 会添加以下转换器:
    1. ByteArrayHttpMessageConverter
    2. StringHttpMessageConverter
    3. ResourceHttpMessageConverter
    4. SourceHttpMessageConverter
    5. FormHttpMessageConverter
    6. Jaxb2RootElementHttpMessageConverter
    7. MappingJackson2XmlHttpMessageConverter
    8. MappingJackson2HttpMessageConverter
  • 因此,每当我们将 java 对象转换为 JSON 时,spring 都会按顺序逐一检查这个转换器列表,然后选择相关的一个进行转换
  • 现在,如果我们将自定义 MappingJackson2HttpMessageConverter 添加到此列表作为最后一个元素,那么 spring 将不会到达它,因为在到达我们的转换器(第 9 个元素)之前,在第 7 个索引处有默认转换器
  • 因此,要解决此问题,我们需要删除默认的 MappingJackson2HttpMessageConverte 并需要添加我们的自定义转换器
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// Remove the default MappingJackson2HttpMessageConverter
converters.removeIf(converter -> {
String converterName = converter.getClass().getSimpleName();
return converterName.equals("MappingJackson2HttpMessageConverter");
});
// Add your custom MappingJackson2HttpMessageConverter
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
converter.setObjectMapper(objectMapper);
converters.add(converter);
WebMvcConfigurer.super.extendMessageConverters(converters);
}
}

注意:请不要使用 configureMessageConverters() 而不是 WebMvcConfigurer 中的 extendMessageConverters(),因为 configure 方法将删除默认安装的所有现有转换器。

希望它能帮助像我这样浪费了几个小时调试问题的人:)

关于java - @EnableWebMvc 以数组格式显示日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64377067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com