Как принять сложный json в Spring (CrudRepository.save() )

100
28 мая 2019, 20:40
public interface SurveyRepository extends JpaRepository<Survey, Long> {}

-

@Entity
public class Survey {
@Id
@GeneratedValue
private Long id;
@NonNull
private String title;
private String content;
private String date;
List<Field> fields; //ругается на List
}

С фронта приходит следующий json:

emptyItem = {
    title: 'Hello',
    content: 'heeell no',
    fields: [
        {
            id: 1,
            title: '',
            voted: 0
        },
        {
            id: 2,
            title: '',
            voted: 0
        }
    ]
};

-

Проблема с сохранением поля fields: Как будет правильнее это исправить?

Думаю можно переопределить метод save() в SurveyRepository (возможно есть какие то стандартные способы).

Answer 1

Первый вариант создать в БД дополнительную таблицу для хранения Field и связать с Survey через one-to-many

Второй вариант хранить список как json в БД

Анотирвать поле кастомным конвертером

@Convert(converter = CustomConverter.class)
private List<Field> fields;

Сам конвертер

public class CustomConverter implements AttributeConverter<List<Field>, String> {
    private ObjectMapper objectMapper = new ObjectMapper();
    @Override
    public String convertToDatabaseColumn(List<Field> object) {
        try {
            return objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return "";
        }
    }
    @Override
    public List<Field> convertToEntityAttribute(String data) {
        try {
            return objectMapper.readValue(data, new TypeReference<List<Field>>() {});
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
READ ALSO
HikariCP Method org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is not yet implemented

HikariCP Method org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is not yet implemented

Хочу использовать HikariCP в своем приложении на спринге, но при создании DataSource возникает исключение

191
Паралельные тесты в testNG.xml

Паралельные тесты в testNG.xml

Помогите составить testngxml для паралельного запуска тестов

148
Сохранение данных в H2 в Spring Boot

Сохранение данных в H2 в Spring Boot

Как сделать чтоб после перезапуска приложения, данные добавленные в текущей сессии сохранились и были загружена в следующий разЯ так понимаю...

160
RxJava merge параллельное выполнение

RxJava merge параллельное выполнение

Не удается запустить параллельно два Observable через merge

161