Регистрация модуля Джексона для Spring Data REST

У меня есть рабочий проект, основанный на примере проекта Spring Data REST, и я пытаюсь сделать пользовательский сериализация с использованием модуля Джексона на основе этого вики-страница.

Вот мой модуль Джексона:

public class CustomModule extends SimpleModule {
    public static Logger logger = LoggerFactory.getLogger(CustomModule.class);

    public CustomModule() {
        super("CustomModule", new Version(1, 0, 0, null));
    }

    @Override
    public void setupModule(SetupContext context) {
        logger.debug("CustomModule.setupModule");
        SimpleSerializers simpleSerializers = new SimpleSerializers();
        simpleSerializers.addSerializer(new CustomDateTimeSerializer());
        context.addSerializers(simpleSerializers);
    }

}

На вики-странице говорится:

Любой bean-компонент модуля, объявленный в рамках вашего ApplicationContext, будет выбран экспортером и зарегистрирован в его ObjectMapper.

Я все еще довольно новичок в Spring, поэтому, возможно, я просто помещаю определение своего модульного компонента в неправильное место; в настоящее время он находится в src/main/resources/META-INF/spring-data-rest/shared.xml, который импортируется из repositories-export.xml:

<bean id="customModule" class="org.hierax.wpa.schema.mapping.CustomModule" />

Я не вижу оператор журнала в setupModule, но вижу вывод журнала для других классов в том же пакете.

Я использую Spring Data REST 1.0.0.RC2.


person Mike Partridge    schedule 04.10.2012    source источник
comment
Вы когда-нибудь находили решение этой проблемы?   -  person Amir Raminfar    schedule 23.10.2012
comment
Нет, но я задал вопрос на форуме Spring Data, и, возможно, там будет ответ: forum.springsource.org/   -  person Mike Partridge    schedule 24.10.2012


Ответы (2)


Я успешно использовал решение, описанное в записи вики, на которую вы ссылались (хотя, возможно, оно изменилось после этого сообщения о переполнении стека)

В моем случае я использовал [email protected].

Ваш код кажется правильным, и при условии, что контекст вашего приложения загружается правильно, я не вижу причин, по которым он не работает.

Я прикрепил свой более простой модуль, который иллюстрирует использование средства форматирования даты:

@Component
public class JsonMarshallingConfigModule extends SimpleModule {

  public JsonMarshallingConfigModule() {
    super("JsonMarshallingConfigModule", new Version(1, 0, 0, "SNAPSHOT"));
  }

  @Override public void setupModule(SetupContext context) {
    context.getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"));
  }
}

Возможно, его можно использовать, чтобы определить, действительно ли проблема заключается в модуле Джексона или в spring-data-rest-mvcweb.

person Benjamin Conlan    schedule 05.03.2013
comment
Спасибо, что поделились своим решением! Недавно я обновился до [email protected] и перешел на конфигурацию на основе кода, как в примере проекта, и теперь он работает с добавлением @Component в CustomModule. - person Mike Partridge; 11.03.2013
comment
Не могу заставить это работать. Компонент загружен, я вижу, что экземпляр создан, однако setupModule() не вызывается. Почему? - person Elad Tabak; 29.07.2014

В настоящее время можно настроить модуль в Spring Boot следующим образом:

@Bean
public Module customModule() {
  return new CustomModule();
}

Ссылка: Последняя интеграция Джексона улучшения весной

person Denis C de Azevedo    schedule 30.10.2015