Marshall @Id to JSON 同时保留 Java 8 次格式化
Marshall @Id to JSON while retaining Java 8 time formatting
我正在尝试将对象映射到 JSON。这很好用,但我还想在 JSON 中公开 @Id
。我找到了 this 关于如何做到这一点的答案,但为了使用该解决方案,我必须扩展 RepositoryRestMvcConfiguration
。当我扩展它时,我的 Java 8 时间格式被破坏了。我的 JSON 如下:
{"name":"erik",birthDate:"2015-01-01"}
birthDate 字段是 Java 8 LocalDate。现在,我还尝试通过扩展 RepositoryRestMvcConfiguration
并设置 configuration.exposeIdsFor(MyClass.class);
来公开 @Id
。现在我公开了 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
格式的同时公开 class 的 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;
}
};
}
我正在尝试将对象映射到 JSON。这很好用,但我还想在 JSON 中公开 @Id
。我找到了 this 关于如何做到这一点的答案,但为了使用该解决方案,我必须扩展 RepositoryRestMvcConfiguration
。当我扩展它时,我的 Java 8 时间格式被破坏了。我的 JSON 如下:
{"name":"erik",birthDate:"2015-01-01"}
birthDate 字段是 Java 8 LocalDate。现在,我还尝试通过扩展 RepositoryRestMvcConfiguration
并设置 configuration.exposeIdsFor(MyClass.class);
来公开 @Id
。现在我公开了 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
格式的同时公开 class 的 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;
}
};
}