Jackson serializationConfig - PullRequest
       4

Jackson serializationConfig

4 голосов
/ 25 февраля 2011

Я использую Jackson JSON в приложении Spring 3 MVC. Чтобы не сериализовать все поля Date, я создал собственный объектный сопоставитель, который использует определенный DateFormat:

@Component("jacksonObjectMapper")
public class CustomObjectMapper extends ObjectMapper
{
    Logger log = Logger.getLogger(CustomObjectMapper.class);

    @PostConstruct
    public void afterProps()
    {
        log.info("PostConstruct... RUNNING");
        //ISO 8601
        getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SZ"));


    }

    //constructors...

}

Этот пользовательский ObjectMapper внедряется в JsonConverter:

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json" />
    <property name="objectMapper" ref="jacksonObjectMapper" /> <!-- defined in CustomObjectMapper -->
</bean>

Нет никаких исключений в журналах и сериализации, но он не собирает формат даты, он просто сериализует метку времени. Аннотация @PostConstruct работает, оператор log в методе находится в журналах.

Кто-нибудь знает, почему это не удается?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Вам также может понадобиться указать, что вы хотите сериализовать сериализацию даты, выполнив:

configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);

(хотя я предполагал, что установка ненулевого формата даты может также вызвать его, но, возможно, нет)

Кроме того, вы можете выполнить настройку mapper непосредственно из конструктора (что безопасно). Не то чтобы это изменило поведение, но избавило бы от необходимости использования отдельного метода конфигурации.

0 голосов
/ 25 февраля 2011

Я сделал ниже, что работает, чтобы обойти совместимость с метками времени Java / PHP.Java использует миллисекунды, поскольку EPOCH и PHP используют секунды, поэтому было проще использовать даты ISO.

Я объявляю следующие адаптеры сообщений:

<bean id="messageAdapter"
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean id="jacksonJsonMessageConvertor"
                class="my.app.MyMappingJacksonHttpMessageConverter"/>                   
        </list>
    </property>
</bean>

И MyMappingJacksonHttpMessageConverter выглядит следующим образом:

public class MyMappingJacksonHttpMessageConverter extends MappingJacksonHttpMessageConverter {

public MyMappingJacksonHttpMessageConverter(){
    super();
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
    setObjectMapper(objectMapper);
}
}

С учетом вышеизложенного все даты записываются в формате ISO.

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