Сохранение массива json в данные postgresql с использованием Java API Spring Boot

У меня есть массив Json в моем объекте запроса и объекте POJO, мне нужно сохранить это поле jsonarray в столбце jsonb в моей таблице postgresql.

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

Я получаю исключение при попытке попасть через почтальона, получая исключение:

Ошибка определения типа: [простой тип, класс io.r2dbc.postgresql.codec.Json]; вложенным исключением является com.fasterxml.jackson.databind.exc.InvalidDefinitionException: невозможно создать экземпляр io.r2dbc.postgresql.codec.Json (не существует создателей, таких как конструктор по умолчанию): абстрактные типы либо должны быть сопоставлены с конкретными типами, иметь пользовательский десериализатор или содержать дополнительный тип информация\n в [Источник: (io.netty.buffer.ByteBufInputStream); л

вы можете попробовать stackoverflow.com/a/70143558/175554 и если это не сработает, не могли бы вы выложить репродукцию на github?

ozkanpakdil 24.12.2022 19:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте конвертер для чтения и конвертер для записи, таким образом он будет конвертировать между вашим типом и 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) {
    }
}

Затем зарегистрируйте свои конвертеры через 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);
}

Другие вопросы по теме