简体   繁体   English

使用 spring 引导 json 数组保存到 postgresql 数据 java API

[英]Saving json array into postgresql data using spring boot java API

I have a Json Array in my request object and POJO object, I need to save that jsonarray field into jsonb column in my postgresql table.我的请求 object 和 POJO object 中有一个 Json 数组,我需要将该 jsonarray 字段保存到我的 postgresql 表中的 jsonb 列中。

"productId": "1",
"product":[ 
     {
     "name": "PENCIL",
     "quantity":"5"
     }]

I am getting an exception when trying to hit it via postman, getting exception:尝试通过 postman 访问它时出现异常,出现异常:

Type definition error: [simple type, class io.r2dbc.postgresql.codec.Json];类型定义错误:[简单类型,class io.r2dbc.postgresql.codec.Json]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of io.r2dbc.postgresql.codec.Json (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at [Source: (io.netty.buffer.ByteBufInputStream);嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of io.r2dbc.postgresql.codec.Json (no Creators, like default constructor, exist): 抽象类型或者需要映射到具体类型具有自定义反序列化器,或在 [Source: (io.netty.buffer.ByteBufInputStream) 处包含其他类型信息\n; l

Create a converter for reading and a converter for writing, thus it will convert between your type and Postgres io.r2dbc.postgresql.codec.Json .创建一个用于读取的转换器和一个用于写入的转换器,因此它将在您的类型和 Postgres io.r2dbc.postgresql.codec.Json之间进行转换。

@ReadingConverter
@RequiredArgsConstructor
public class JsonToYourTypeConverter implements Converter<Json, YourType > {
    private final ObjectMapper objectMapper;
    @Override
    public YourType convert(Json json) {
    }
}
@WritingConverter
@RequiredArgsConstructor
public class YourTypeToJsonConverter implements Converter<YourType, Json > {
    private final ObjectMapper objectMapper;
    @Override
    public Json convert(YourType data) {
    }
}

Then register your converters via R2dbcCustomConversions bean.然后通过R2dbcCustomConversions bean 注册您的转换器。

@Bean
public R2dbcCustomConversions r2dbcCustomConversions(ConnectionFactory connectionFactory, ObjectMapper objectMapper) {
    var dialect = DialectResolver.getDialect(connectionFactory);
    var converters = List.of(
            new JsonToYourTypeConverter(objectMapper),
            new YourTypeToJsonConverter(objectMapper),
    );
    return R2dbcCustomConversions.of(dialect, converters);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM