Java 在Spring3.1中,我在哪里指定Jackson SerializationConfig.Feature设置
我很困惑,为什么Spring使用默认的jackson包含似乎定制了默认的jackson配置 其中一个设置是Java 在Spring3.1中,我在哪里指定Jackson SerializationConfig.Feature设置,java,json,spring,spring-mvc,jackson,Java,Json,Spring,Spring Mvc,Jackson,我很困惑,为什么Spring使用默认的jackson包含似乎定制了默认的jackson配置 其中一个设置是WRITE\u DATES\u AS\u TIMESTAMPS,它是true,但是Spring在某个地方将其更改为false,并提供了一种日期格式 这到底发生在哪里?我希望我的日期保持连续的数字 更新:结果不是spring导致了问题,而是hibernates代理类导致了问题。出于某种原因,如果hibernate的类型映射为type=“date”,则它将序列化为日期字符串,但如果它的type=
WRITE\u DATES\u AS\u TIMESTAMPS
,它是true
,但是Spring在某个地方将其更改为false
,并提供了一种日期格式
这到底发生在哪里?我希望我的日期保持连续的数字
更新:结果不是spring导致了问题,而是hibernates代理类导致了问题。出于某种原因,如果hibernate的类型映射为
type=“date”
,则它将序列化为日期字符串,但如果它的type=“timestamp”
按预期序列化。与其花太多时间研究这个问题,我现在决定将所有映射更改为时间戳。从3.1 M1开始,您可以通过mvc:annotation-driven
的子元素注册HttpMessageConverters
来指定jackson自定义配置
看
请参阅使向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>
除了使用指定的日期格式构造实例外,还将启用或禁用
Feature.WRITE_DATES_AS_timestamp(如果格式设置为null,则启用;如果格式设置为非null,则禁用)
这似乎正是我想要的,尽管它似乎不适合我,或者出于其他原因,Spring选择了一个不同于我创建的
MappingJacksonHttpMessageConverter
实例。是否有办法识别已创建的、可被选中的MappingJacksonHttpMessageConverter
的所有实例?我已确认CustomObjectMapper
实现只需将测试对象写入this.setSerializationConfig(serialConfig)之后的文件,即可写入正确的格式代码>,它工作正常,尽管
声明似乎没有使用此实例。我是否可能需要为已知类型指定id
?我发现了问题。这归结为使用hibernate映射type=“date”
,更改为type=“timestamp”
解决了这个问题。
@Component("jacksonObjectMapper")
public class CustomObjectMapper extends ObjectMapper {
@PostConstruct
public void afterPropertiesSet() throws Exception {
SerializationConfig serialConfig = getSerializationConfig()
.withDateFormat(null);
//any other configuration
this.setSerializationConfig(serialConfig);
}
}