java - 将 @Id Marshall 转换为 JSON,同时保留 Java 8 时间格式

标签 java json spring jackson spring-boot

我正在尝试将对象映射到 JSON。这工作正常,但我还想公开 JSON 中的 @Id 。我找到了this回答如何做到这一点,但为了使用该解决方案,我必须扩展 RepositoryRestMvcConfiguration。当我扩展它时,我的 Java 8 时间格式被破坏了。我的 JSON 如下:

{"name":"erik",birthDate:"2015-01-01"}

birthDate 字段是 Java 8 LocalDate。现在,我还尝试公开 @Id,这是通过扩展 RepositoryRestMvcConfiguration 并设置 configuration.exposeIdsFor(MyClass.class); 来实现的。 。现在我已经公开了 Id,但是,由于扩展了 RepositoryRestMvcConfiguration,我的 LocalDate 现在被序列化为:

"birthDate":{"year":2015,"month":"AUGUST","chronology":{"id":"ISO","calendarType":"iso8601"},"dayOfMonth":15,"dayOfWeek":"SATURDAY","era":"CE","dayOfYear":227,"leapYear":false,"monthValue":8}

所以,我的问题是:如何在保留 LocalDate 格式的同时公开类的 Id?

最佳答案

听起来您遇到了 this Spring Boot issue 中描述的问题。简而言之,问题在于 RepositoryRestMvcConfiguration 子类的存在导致使用 Spring MVC 的默认 JSON 转换器,而不是您配置的转换器。如问题中所述,您可以通过在应用程序的配置中声明以下 bean 来解决该问题:

@Bean
public HttpMessageConverters httpMessageConverters(
        final Jackson2ObjectMapperBuilder builder,
        List<HttpMessageConverter<?>> converters) {
    return new HttpMessageConverters(converters) {

        @Override
        protected List<HttpMessageConverter<?>> postProcessConverters(
                List<HttpMessageConverter<?>> converters) {
            for (HttpMessageConverter<?> converter : converters) {
                if (converter instanceof MappingJackson2HttpMessageConverter) {
                    builder.configure(((MappingJackson2HttpMessageConverter) converter)
                            .getObjectMapper());
                }
            }
            return converters;
        }
    };
}

关于java - 将 @Id Marshall 转换为 JSON,同时保留 Java 8 时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30230652/

相关文章:

java - 我的 Swing 组件图形未更新

java - 使用 NIO 写入文件时缺少新行

java - Vertx HttpCllentRequest 重定向

json - postgresql json_object_keys(var1) 消除 var1 为 null 的记录

json - package.json 文件在一段时间后损坏

java - 在 apache camel 上下文中存储状态的最佳方式

java - Spring 的 AuthenticationManager 未正确注入(inject)

java - 关闭除主线程之外的所有线程

java - 同步方法还是使用 spring @transactional?

javascript - 如何在 JSONPATH 中获取父节点