Nano Hash - криптовалюты, майнинг, программирование

MapStruct — MapperImpl не найден

Я использую Mapstruct в простом проекте Java, который представляет собой пакет OSGi. Я добавил базовый код:

package com.XXX.XXX.test;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.util.Map;

@Mapper
public interface AccountPreferencesMapper {
    AccountPreferencesMapper MAPPER = Mappers.getMapper(AccountPreferencesMapper.class);

    @Mapping(expression = "java((String) r.get(\"defaultName\"))", target = "name")
    MappedAccountPreferences toMappedAccountPreferences(Map<String, Object> r);
}

И

package com.XXX.XXX.test;

public class MappedAccountPreferences {
    public String name;
}

Когда я создаю пакет, он будет генерировать реализацию внутри:

цель/сгенерированные источники/аннотации/AccountPreferencesMapperImpl.java

Проблема в том, что когда я вызываю AccountPreferencesMapper.MAPPER, я не могу его получить. Он скажет, что это null или я получаю: Не удалось инициализировать класс com.XXX.XXX.test.AccountPreferencesMapper

Я нахожусь в том же пакете со следующим кодом:

Map accountPreferencesMap = new HashMap<String, Object>();
accountPreferencesMap.put("defaultName", "User Name");
MappedAccountPreferences dto = AccountPreferencesMapper.MAPPER.toMappedAccountPreferences( accountPreferencesMap );

Обратите внимание, что мне нужно скомпилировать код, используя: mvn clean install и mvn content-package:install (я не использую какой-либо редактор для сборки)

Я попытался добавить в POM процессор mapstruct-jdk8/mapstruct-processor в качестве отдельной зависимости, как описано в других подобных проблемах с картами stackoverflow, но это не работает.

Благодарю вас!

28.11.2019

  • Вы пробовали @Mapping(target= "r.defaultName", source= "name") MappedAccountPreferences toMappedAccountPreferences(Map<String, Object> r); ? 28.11.2019
  • Я пробовал использовать r.defaultName вместо выражения. Проблема, похоже, в справочной части. Проект не может видеть класс Impl из target/generated-source/annotations/ 28.11.2019
  • Я скучаю по пакету так: target/generated-sources/annotations/com/XXX/XXX/test/AccountPreferencesMapperImpl.java 28.11.2019
  • И... вы можете определить метод default, просто отображающий метод вместо использования выражения. Как default String mapFromDefaultName(Map in) { return in.get("defaultName") }, который будет автоматически вызываться toMappedAccountPreferences 29.11.2019

Ответы:


1

в интерфейсе AccountPreferencesMapper вам не нужно использовать MAPPER

@Mapper
public interface AccountPreferencesMapper {

    @Mapping(expression = "java((String) r.get(\"defaultName\"))", target = "name")
    MappedAccountPreferences toMappedAccountPreferences(Map<String, Object> r);
}

после этого в вашем сервисе вы можете использовать маппер следующим образом:

        Map accountPreferencesMap = new HashMap<String, Object>();
        accountPreferencesMap.put("defaultName", "User Name");
        MappedAccountPreferences mappedAccountPreferences = accountPreferencesMapper.toMappedAccountPreferences(accountPreferencesMap);
       
  • если вы используете весеннюю загрузку, в тесте класса вам нужно добавить:

      @SpringBootTest(classes = {AccountPreferencesMapperImpl.class})
      public class TestClass{
    
      }
    
10.11.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..