10

我有一个基于 Spring Data REST示例项目的工作项目,我正在尝试使用基于此wiki 页面的Jackson 模块进行自定义序列化。

这是我的杰克逊模块:

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);
    }

}

维基页面说:

在您的 ApplicationContext 范围内声明的任何 Module bean 都将被导出器拾取并在其 ObjectMapper 中注册。

我对 Spring 还是很陌生,所以我可能只是把我的模块 bean 定义放在了错误的地方;目前它在 中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。

4

2 回答 2

11

目前,可以像这样在 Spring Boot 中自定义模块:

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

参考:Spring 中最新的 Jackson 集成改进

于 2015-10-30T02:35:32.333 回答
6

我已成功使用您链接到的 wiki 条目中概述的解决方案(尽管自此堆栈溢出帖子以来它可能已更改)

在我的实例中,我使用的是 spring-data-rest-webmvc@1.0.0.RELEASE

您的代码似乎是正确的,并且只要您的应用程序上下文被正确加载,我看不出它有任何不工作的原因。

我附上了我更简单的模块,它举例说明了日期格式化程序的使用:

@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。

于 2013-03-05T12:55:28.607 回答