У меня есть несколько полей в Solr, которые я в настоящее время сопоставляю с Java, например:
@Field("file_*") @Dynamic private final Map<String, List<String>> fileDetails;
это соответствует ряду динамических c полей, например:
file_name_1
file_type_1
file_size_1
...
file_name_2
file_type_2
file_size_2
...
...
Затем я конвертирую эту fileDetails
карту в FileAttachments
объект, который будет использоваться в другом месте кода.
Это в настоящее время приводит к тому, что этот класс имеет некоторый код c для преобразования из того, как данные хранится в Solr, в POJO.
В идеале я бы хотел отобразить его так:
@Field("file_*") private final FileAttachments attachments;
или даже лучше (но, возможно, еще сложнее выполнить sh ):
@Field("file_*") private final List<FileAttachment> attachments;
Затем (кроме аннотаций) класс ничего не знает о том, как данные хранятся в Solr.
Однако проблема в том, что когда я пытаюсь использовать пользовательский преобразователь для поля (, как подробно описано здесь ), преобразователю не передается экземпляр Map<String, List<String>>
, содержащий все поля, соответствующие file_*
, вместо этого ему просто передается экземпляр String
, содержащее значение первого поля, которое соответствует шаблону.
Есть ли каким-либо способом заставить его передать экземпляр Map<String, List<String>>
или любые другие мысли относительно того, как я могу заставить это преобразование происходить вне класса?
В идеальном мире я бы изменил документ solr так это был дочерний объект (ну, их список), но это невозможно, поскольку он является частью устаревшей системы.