Marshall @Id 到 JSON,同时保留 Java 8 时间格式

Posted

技术标签:

【中文标题】Marshall @Id 到 JSON,同时保留 Java 8 时间格式【英文标题】:Marshall @Id to JSON while retaining Java 8 time formatting 【发布时间】: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?

【问题讨论】:

这可能会对您有所帮助,将 JSR 模块添加到您的 ObjectMapper:***.com/questions/28802544/… 【参考方案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;
        
    ;

【讨论】:

以上是关于Marshall @Id 到 JSON,同时保留 Java 8 时间格式的主要内容,如果未能解决你的问题,请参考以下文章

如何保留这种 json 格式,同时在序列化之前添加它?

C# - Marshall by value 问题!

Android:在不使用 marshall() 的情况下从 Parcelable 到 Serializable 的任何快捷方式?

将 XML 转换为 JSON 到 XML 时保留 json:Array 属性

sql [存档Marshall中的陈旧瞬态]从Marshall Inbox归档旧对象#marshall

刚入手 marshall jvm 410 和 1960a 箱体,请问怎么接