【问题标题】:Extending RepositoryRestMvcConfiguration breaks Jackson LocalDateTime Serialisation扩展 RepositoryRestMvcConfiguration 会破坏 Jackson LocalDateTime 序列化
【发布时间】:2017-09-15 14:24:05
【问题描述】:

我正在尝试扩展 RepositoryRestMvcConfiguration 以覆盖自定义的 uriToEntityConverter,但是这样做会导致 Jackson 无法从 String 序列化/反序列化 LocalDateTime。下面的代码显示了我的子类。

我还尝试将jackson-datatype-jsr310 添加到pom 中,看看我是否可以强制支持,但是如果没有我的子类,它仍然可以工作,所以这基本上是一个死胡同。

@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class RepositoryRestMvcConfigurer extends RepositoryRestMvcConfiguration {

  @Override
  @ConfigurationProperties(prefix = "spring.data.rest")
  public RepositoryRestConfiguration config() {
    return super.config();
  }


  @Override
  protected UriToEntityConverter uriToEntityConverter(ConversionService conversionService) {
    return new OverriddenUriToEntityConverter(persistentEntities(), repositoryInvokerFactory(conversionService), repositories());
  }
}

编辑: 我通过注释我的LocalDateTime 属性来指定要使用的序列化器和反序列化器解决了这个问题,但这感觉更像是一种巫术仪式而不是解决方案。

【问题讨论】:

    标签: java spring spring-boot java-8 jackson


    【解决方案1】:

    所以我最终自行解决了这个问题。要实际扩展您还需要:

    • 扩展RepositoryRestConfigurerAdapter的类
    • 返回前一个类并实现AutoConfigureAfter 注释的类

    我基于 Spring 中的 RepositoryRestMvcAutoConfiguration 类,但将其从 @ConditionalOnMissingBean(RepositoryRestMvcConfiguration.class) 更改为 @ConditionalOnBean(ExtendedRepositoryRestMvcConfiguration.class)。这使它能够使用我覆盖的函数正确配置RestRepository

    【讨论】:

    • 你能发布你的代码吗?我很困惑你是如何解决的。
    • 我明天有笔记本电脑后必须这样做,但我会在 Github 上放一个示例项目。
    • 这是一个给你的示例项目,我还没有完全测试过,但它展示了如何扩展以及你需要从 Spring github.com/nicholassmith/restconfigurerdemo获取哪些位
    • 感谢您的代码。我可以使用它来覆盖 RepositoryRestMvcConfiguration 方法之一。然而,随着 Spring 库的较新版本,类的签名发生了变化,我能够适应。
    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 2021-03-30
    • 2015-06-16
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多