为 spring-mvc(非启动)自定义 JSON 的 JSON 日期格式?

发布于 2025-01-13 01:24:40 字数 1052 浏览 0 评论 0 原文

我正在转换我的应用程序以摆脱 spring-boot,它现在仅使用 Spring (5.3)。

我添加了 @EnableWebMvc 配置,并且我的端点在大部分情况下都能正常工作 - 它们以 JSON 形式返回我想要的数据。

之前,我使用 spring-boot 属性自定义了日期格式: spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

在新的不过,在纯 Spring 应用程序中,它会回归序列化为 long 值。

我已经尝试了以下方法,但似乎根本没有使用这些 bean:

  @Bean
  public ObjectMapper objectMapper() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    ObjectMapper dateFormatMapper = new ObjectMapper();
    dateFormatMapper.setDateFormat(dateFormat);
    return dateFormatMapper;
  }

  @Bean 
  public MappingJackson2HttpMessageConverter mappingJackson2JsonView(){
    var converter = new MappingJackson2HttpMessageConverter();
    converter.getObjectMapper().setDateFormat(
      new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") );
    return converter;    
  }

我希望在全局范围内自定义格式,而不是在每个字段的基础上。

对于纯 Spring @EnableWebMvc 设置来说,与 spring.jackson.date-format 等效的是什么?

I am converting my app to get rid of spring-boot, it now uses only Spring (5.3).

I've added the @EnableWebMvc configuration and I have my endpoints working properly for the most part - they return the data I want as JSON.

Previously, I customised the date format with the spring-boot property: spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

In the new pure-spring app though, it's regressed back serializing to a long value.

I've tried the following, but it doesn't seem to even use these beans at all:

  @Bean
  public ObjectMapper objectMapper() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    ObjectMapper dateFormatMapper = new ObjectMapper();
    dateFormatMapper.setDateFormat(dateFormat);
    return dateFormatMapper;
  }

  @Bean 
  public MappingJackson2HttpMessageConverter mappingJackson2JsonView(){
    var converter = new MappingJackson2HttpMessageConverter();
    converter.getObjectMapper().setDateFormat(
      new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") );
    return converter;    
  }

I'm looking to customise the format globally, not on a per-field basis.

What would be the equivalent of spring.jackson.date-format for pure Spring @EnableWebMvc setup?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

高冷爸爸 2025-01-20 01:24:40

您可以使用 WebMvcConfigurer@EnableWebMvc 来自定义 MappingJackson2HttpMessageConverter

例如:

@Configuration
@EnableWebMvc
public class YourConfiguration implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                .indentOutput(true)
                .dateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
    }
}


有关更多信息,请参阅 1.11.7。消息转换器 - Web on Servlet Stack - docs.spring.io

You can customize MappingJackson2HttpMessageConverter by using WebMvcConfigurer with @EnableWebMvc.

For example:

@Configuration
@EnableWebMvc
public class YourConfiguration implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                .indentOutput(true)
                .dateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
    }
}


For more information, please see 1.11.7. Message Converters - Web on Servlet Stack - docs.spring.io.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文