【问题标题】:Marshall @Id to JSON while retaining Java 8 time formattingMarshall @Id 到 JSON,同时保留 Java 8 时间格式
【发布时间】:2015-07-25 16:12:13
【问题描述】:

我正在尝试将对象映射到 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?

【问题讨论】:

标签: java json spring jackson spring-boot


【解决方案1】:

听起来您遇到了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;
        }
    };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2021-12-03
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多