我将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
类的getArrayType
方法中引发了PostgresArrayColumns
,因为我的自定义类型不是简单类型。
有没有办法绕过这个守卫的某些财产?
答案 0 :(得分:1)
当前,由于DatabaseClient
会将集合类型的值视为Postgres数组字段的值,因此无法进行覆盖。请通过https://github.com/spring-projects/spring-data-r2dbc/提交票证以解决此问题。
答案 1 :(得分:1)
根据文档,它不是有意支持的。
<块引用>请注意,转换器适用于单一属性。集合属性(例如集合)按元素进行迭代和转换。不支持集合转换器(例如 Converter、OutboundRow)。
来源:spring-data-r2dbc mapping reference
解决方案:
创建一个包装类(复杂类型)如下:
class CustomObjectList {
List<CustomObject> customObjects;
}
然后,您应用转换器 Converter<CustomObjectList, String>
,反之亦然。
public class CustomObjectListToStringConverter implements Converter<CustomObjectList, String> {