java - 扩展 RepositoryRestMvcConfiguration 打破了 Jackson LocalDateTime 序列化

标签 java spring spring-boot java-8 jackson

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

我还尝试将 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 属性来指定要使用的序列化器和反序列化器来解决这个问题,但这感觉更像是一个巫术仪式而不是解决方案。

最佳答案

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

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

我的方法基于 RepositoryRestMvcAutoConfiguration 类,实际上在 Spring 中,但将其从 @ConditionalOnMissingBean(RepositoryRestMvcConfiguration.class) 更改为 @ConditionalOnBean(ExtendedRepositoryRestMvcConfiguration.class)。这允许它使用我覆盖的函数正确配置 RestRepository

关于java - 扩展 RepositoryRestMvcConfiguration 打破了 Jackson LocalDateTime 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43494321/

相关文章:

java - 使用 mapstruct 映射嵌套对象

spring - 实现spring security后无法在网页上加载bootstrap

java - Spring的Lifecycle.stop()应该是同步的还是异步的?

java - 日历滚动操作无法为我提供正确的输出

java - Android Studio 等待蓝牙启用

java - ContextConfiguration 抛出 java.io.FileNotFoundException :

java - Spring Boot OneToOne保存(): A different object with the same identifier value was already associated with the session

java - RabbitMQ 请求响应和消息确认

java - Spring - ConversionService 没有 @Autowired 因为 ConfigurationPropertiesBindingPostProcessor

java - Spring boot 的 Arango Edge 创建错误