Хорошо, я не очень уверен, как спросить это, но я собираюсь попробовать. Я использую MapStruct для сопоставления входящих сетевых объектов с объектами базы данных. Я использую Realm.io в качестве локального хранилища данных. Некоторые из моих объектов имеют RealmList<Obj>
, в которых хранятся их отношения, например:
public class Client extends RealmObject {
@PrimaryKey
private String id = UUID.randomUUID().toString();
private Date createdAt = new Date();
private Date updatedAt = new Date();
private RealmList<Contact> contacts; // <-- this guy
// constructors and getters/setters
}
Я использую moshi-jsonapi в качестве десериализатора. Эквивалентные поля dto:
private String createdAt = new Date();
private String updatedAt = new Date();
private HasMany<Contact> contacts;
Проблема: заставить MapStruct правильно преобразовать HasMany
в RealmList
. Одна из проблем, с которыми я сталкиваюсь, заключается в правильном анализе полей даты ISO8601 в отношениях. Я могу сделать это с атрибутами объекта, а не с его отношениями. Вот работающий Mapper в качестве примера:
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ClientMapper {
ClientMapper INSTANCE = Mappers.getMapper(ClientMapper.class);
@Mappings({
@Mapping(target = "createdAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"),
@Mapping(target = "updatedAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
})
Client resourceToRealm(biz.kusasa.saleboat.jsonapi.resources.Client client);
List<Client> resourcesToRealms(List<biz.kusasa.saleboat.jsonapi.resources.Client> clients);
}
Однако эти правила синтаксического анализа даты, по-видимому, не применяются при сопоставлении отношений. Есть тут специалисты по mapstruct?
Contact
(он должен работать так же, как и дляClientMapper
. Я также предполагаю, что вам нужно определить некоторые пользовательские сопоставления дляHasMany
вRealmList
, поскольку они неизвестны MapStruct. У вас уже есть что-то подобное? - person Filip   schedule 29.10.2017