3

我使用 Postgres 作为我的数据源,并为包含我的自定义对象列表的属性创建了一个自定义 Spring 转换器:

@Slf4j
@WritingConverter
@AllArgsConstructor
public class CustomObjectListToStringConverter implements Converter<List<CustomObject>, String> {

    @Override
    public String convert(@Nonnull List<CustomObject> source) {
        try {
            return objectMapper.writeValueAsString(source);
        } catch (JsonProcessingException e) {
            log.error("Error occurred while serializing list of CustomObject to JSON.", e);
        }
        return "[]";
    }

}

转换进行得很顺利,但由于我的自定义类型不是简单类型,所以在类的方法中IllegalArgumentException提出。getArrayTypePostgresArrayColumns

有没有办法绕过这个守卫的一些财产?

4

2 回答 2

2

目前,没有覆盖可能,因为DatabaseClient将集合类型的值视为 Postgres 数组字段的值。请在https://github.com/spring-projects/spring-data-r2dbc/提交工单以解决问题。

于 2019-06-18T09:48:39.800 回答
1

根据文档故意不支持它。

请注意,转换器应用于奇异属性。集合属性(例如集合)是按元素迭代和转换的。不支持集合转换器(例如 Converter<List>、OutboundRow)。

来源:spring-data-r2dbc 映射参考

解决方案:
创建一个包装类(复杂类型)如下:

class CustomObjectList { 
  List<CustomObject> customObjects;
}

然后,您应用转换器Converter<CustomObjectList, String>,反之亦然。

public class CustomObjectListToStringConverter implements Converter<CustomObjectList, String> {
于 2021-03-16T10:16:42.820 回答