我在哪里指定Spring 3.1中的Jackson SerializationConfig.Feature设置

时间:2012-03-06 02:00:07

标签: java json spring spring-mvc jackson

我很困惑为什么使用默认包含的jackson,Spring似乎已经定制了默认的Jackson配置。

一个令人不安的设置是WRITE_DATES_AS_TIMESTAMPSJackson defaulttrue但是Spring已将某处更改为false并提供了日期格式。

世界上哪里发生这种情况?我希望我的日期保持序列化为数字。

更新:原来这不是导致问题的春天,它实际上是休眠导致问题的代理类。出于某种原因,如果hibernate具有type="date"的类型映射,它将序列化为日期字符串,但如果它的type="timestamp"按预期序列化。而不是花太多时间研究这个,我决定暂时改变我的所有映射到时间戳。

1 个答案:

答案 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则禁用)