我很困惑为什么使用默认包含的jackson,Spring似乎已经定制了默认的Jackson配置。
一个令人不安的设置是WRITE_DATES_AS_TIMESTAMPS
,Jackson default是true
但是Spring已将某处更改为false
并提供了日期格式。
世界上哪里发生这种情况?我希望我的日期保持序列化为数字。
更新:原来这不是导致问题的春天,它实际上是休眠导致问题的代理类。出于某种原因,如果hibernate具有type="date"
的类型映射,它将序列化为日期字符串,但如果它的type="timestamp"
按预期序列化。而不是花太多时间研究这个,我决定暂时改变我的所有映射到时间戳。
答案 0 :(得分:15)
从3.1 M1开始,您可以通过HttpMessageConverters
的子元素注册mvc:annotation-driven
来指定jackson自定义配置。
请参阅Spring 3.1 MVC Namespace Improvements
请参阅SPR-7504更轻松地将新的邮件转换器添加到AnnotationMethodHandlerAdapter
例:
<bean id="jacksonObjectMapper" class="x.y.z.CustomObjectMapper">
</bean>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
CustomObjectMapper对象
@Component("jacksonObjectMapper")
public class CustomObjectMapper extends ObjectMapper {
@PostConstruct
public void afterPropertiesSet() throws Exception {
SerializationConfig serialConfig = getSerializationConfig()
.withDateFormat(null);
//any other configuration
this.setSerializationConfig(serialConfig);
}
}
SerializationConfig .withDateFormat
除了使用指定的日期格式构造实例外,还将启用或禁用 Feature.WRITE_DATES_AS_TIMESTAMPS(如果格式设置为null则启用;如果非null则禁用)