_class field и spring data couchbase

Итак, я пытался найти способ удалить / переименовать (и изменить значение полей) поле _class из документа, созданного с помощью spring data couchbase, поскольку документ будет храниться одной службой и, по всей вероятности, будет кем-то потреблен Абсолютно другой.

Я играл с api для spring couchbase и, немного проб и ошибок, обнаружил, что могу переименовать поле _class с настраиваемым значением, используя следующий способ ->

1) Переопределите метод typeKey в классе, наследующем AbstractCouchbaseConfiguration. Например, предположим, что мы переопределили typeKey, чтобы сделать следующее ->

@Override public String typeKey() { return "type"; }

2) В POJO, который хранит данные в couchbase, добавьте поле с тем же именем поля, которое вы указали в возвращаемом значении метода typeKey, и при необходимости дайте ему настраиваемое значение -

private final String type = "studentDoc";

Я хотел проверить, является ли это допустимым способом решения этой проблемы или / и доступен ли какой-то лучший способ сделать что-то вроде этого сейчас


person silver-soul    schedule 11.03.2019    source источник


Ответы (2)


На данный момент это единственный способ сделать это с данными Spring, мы хотели бы добавить несколько дополнительных способов сделать это, но мы ограничены контрактами интерфейса Spring Data. Вот почему большая часть дополнительных конфигураций выполняется через AbstractCouchbaseConfiguration.

person deniswsrosa    schedule 12.03.2019

Библиотеке данных Spring требуется поле с полностью определенным именем класса в качестве его значения, чтобы понять, в какой объект класса следует десериализовать данные из couchbase. По умолчанию это поле будет называться _class, но его можно изменить, переопределив метод typeKey() в вашей конфигурации Couchbase (расширение AbstractCouchbaseConfiguration), как указано вами.

@Override
public String typeKey() {
    return "customType";
}

Но, насколько мне известно, вам не следует изменять значение поля, поскольку библиотека не сможет понять, в какой объект десериализовать данные.

person Madhu Bhat    schedule 11.03.2019
comment
Я понимаю суть рекомендации не изменять значение _class. Но в моем сценарии это не имеет большого смысла, потому что у потребителя этих документов, вероятно, не будет доступа к классу, который я использую для хранения документов. Вот почему я хочу удалить / переименовать поле во что-то вроде типа (это стандартное поле, которое мы используем для идентификации различных типов документов) - person silver-soul; 11.03.2019