Где я могу указать настройки Jackson SerializationConfig.Feature в Spring 3.1 - PullRequest
10 голосов
/ 06 марта 2012

Я озадачен, почему при использовании включения Джексона по умолчанию Spring, по-видимому, настроил конфигурацию Джексона по умолчанию.

Одна настройка, с которой он связывается, это WRITE_DATES_AS_TIMESTAMPS, Джексон по умолчанию равно true однако Spring где-то изменил это значение на false и также предоставил формат даты.

Где в мире это происходит?Я хочу, чтобы мои даты оставались сериализованными как числа.

ОБНОВЛЕНИЕ : Оказывается, проблема не в весне, а в спящих классах, вызывающих проблему.По какой-то причине, если hibernate имеет отображение типа type="date", оно сериализуется как строка даты, хотя если type="timestamp", оно сериализуется, как и ожидалось.Вместо того, чтобы тратить слишком много времени на изучение этого, я решил пока просто поменять все свои отображения на временную метку.

1 Ответ

15 голосов
/ 14 марта 2012

Начиная с 3.1 M1, вы можете указать пользовательскую конфигурацию Джексона, зарегистрировав HttpMessageConverters через подэлемент mvc:annotation-driven.

См. Spring 3.1. Улучшения пространства имен MVC

См. SPR-7504 Упрощение добавления новых конвертеров сообщений в AnnotationMethodHandlerAdapter

Exemple:

<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 (включить, если формат установлен как ноль; отключить, если не ноль)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...