当前位置: 首页 > 知识库问答 >
问题:

R2dbc定制转换器

云长恨
2023-03-14

如何将自定义转换器添加到mu Spring Boot应用程序?我的实体字段

    @CreatedDate
    @Column(value = "create_time")
    private Instant createTime;

我的转换器是

    @Bean
    public Converter<Long, Instant> longInstantConverter() {
        return new Converter<Long, Instant>() {
            @Override
            public Instant convert(Long source) {
                return Instant.ofEpochMilli(source);
            }
        };
    }

    @Bean
    public Converter<Instant, Long> instantLongConverter() {
        return new Converter<Instant, Long>() {
            @Override
            public Long convert(@NotNull Instant source) {
                return source.toEpochMilli();
            }
        };
    }

我有个例外

org.springframework.data.mapping.MappingException: Could not read property @org.springframework.data.relational.core.mapping.Column(value=create_time) @org.springframework.data.annotation.CreatedDate()private java.time.Instant com.example.database.model.MyTable.createTime from result set!
.........
Caused by: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Long] to type [java.time.Instant]
........

我怎样才能修好它,请帮帮我!

共有2个答案

戈巴英
2023-03-14

尝试分别创建ReadingConverterWritingConverter,并将它们注册到Config文件中。

public class DatabaseConfig extends AbstractR2dbcConfiguration {
    //...
    
    @Override
    protected List<Object> getCustomConverters() {
        return List.of(
                new PostReadingConverter(),
                new PostStatusWritingConverter()
        );
    }
}

检查此处的完整代码。

对于Spring Boot应用程序,请尝试重写默认bean。

东门文斌
2023-03-14

您需要向R2DBC注册转换器:

@Bean
public R2dbcCustomConversions customConversions() {
    List<Converter<?, ?>> converters = new ArrayList<>();
    converters.add(new SomeReadConverter());
    converters.add(new SomeWriteConverter());
    return R2dbcCustomConversions.of(MySqlDialect.INSTANCE, converters);
    // deprecated: return new R2dbcCustomConversions(converters);
}

您不需要覆盖整个R2dbcConfiguration。

 类似资料:
  • 我们可以在JSF中创建自己的自定义转换器。 在JSF中定义自定义转换器分为三个步骤。 步 描述 1 通过实现javax.faces.convert.Converter接口创建转换器类。 2 实现上面接口的getAsObject()和getAsString()方法。 3 使用注释@FacesConvertor为自定义转换器分配唯一的ID。 第1步:创建转换器类:UrlConverter.java p

  • XStream允许从头开始编写转换器,以便开发人员可以编写一个全新的实现,介绍如何将对象序列化为XML,反之亦然。 转换器接口提供三种方法 - canConvert - 检查支持的对象类型序列化。 marshal - 它将对象序列化为XML。 unmarshal - 它从XML unmarshal序列化对象。 第1步:实现转换器接口 class StudentConverter implement

  • 问题内容: 我正在尝试使用自定义转换器进行改造 以下是我的自定义转换器 我收到以下错误 在尝试进行此api调用时 我想转换器正在覆盖对api调用的请求,如何避免这种情况并传递在改造服务中定义的请求主体。 回应: 问题答案: 我会做这样的事情: 然后在创建RestAdapter时: 然后: 这不是理想的,因为对象是自定义的,但是我现在能想到的任何其他解决方案都更加复杂。 这里的反序列化器专门为声明为

  • 我们有一些反映到多个数据库字段的自定义类型。例如 存储为3个单独的db字段。总是写作很无聊 然后从相应的记录字段中获取记录并创建PersonName类型。 其思想是定义一些多列自定义字段,在查询执行期间由jooq将其扩展为三个“真实”字段,并打包到结果中的一个PersonName对象。 看起来用可以做这样的事情,但我想知道,可能已经有解决这种情况的方法了。

  • 我有自定义转换器: 但@Autowired正在设置空值。导致。 这是Roles类: 我用的是Java配置。转换器已注册: 当I@Autowired在controller中扮演角色时,它的工作。 为什么@autowired在转换器中设置null?

  • 题目描述 将十进制整数n转换成k进制数。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入两个整数n和k( -1000000 ≤ n ≤ 1000000,> 2 ≤ k ≤ 9)。 输出格式: 对于每组测试,先输出n, 然后输出一个空格,最后输出对应的k进制数。 输入样例: 2 123 8 -12 2 输出样例: 123 173 -12 -1100 解题代码