当前位置: 首页 > 知识库问答 >
问题:

如何通过接口映射器实现依赖关系

晋言
2023-03-14

我尝试使用java Spring映射对象DTO到对象正常

我尝试调用接口映射器,因为服务,但我有NullPointerExctive,似乎接口没有注入服务,我使用自动配置,我退出了这个

服务


@Service
public class FollowService implements IFollowService{

    @Autowired
    IFollowRepository iFollowRepository;

    private IUserMapper iUserMapper;

  @Override
    public UserDTOCount countFollowers(int userId) throws UserIdNotFoundException, UserNotFollowException {
        return iUserMapper.toUserCount(iFollowRepository.getUserById(userId));
    }



制图员

@Mapper(componentModel = "spring")
public interface IUserMapper {

  @Mappings({
          @Mapping(source = "id" , target = "id"),
          @Mapping(source = "name", target = "name"),
          @Mapping(source = "followers", target = "followers", qualifiedByName = "followers")
  })
  UserDTOCount toUserCount(User user);

错误

processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null
    at com.reto1.demo.Service.FollowService.countFollowers(FollowService.java:54) ~[classes/:na]

我尝试调试,我看到iUserMapper是空的,我不知道如何调用,因为服务

谢谢!

共有2个答案

太叔高义
2023-03-14

看了很多问题后我用这个表格解决了错误

-首先,在pom中添加插件。xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source> <!-- depending on your project -->
                <target>1.8</target> <!-- depending on your project -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                    <!-- other annotation processors -->
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

第二,我加入了龙目舞

 <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.20</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.4.1.Final</version>
                        </path>

最后我加上自动配发

@Service
public class FollowService implements IFollowService{

    @Autowired
    IFollowRepository iFollowRepository;

    @Autowired
    IUserMapper iUserMapper;

梁丘经艺
2023-03-14

FollowService中,iUserMappernull的原因是您没有注射映射器。

您需要在服务中添加@Autowired

e. g.

@Service
public class FollowService implements IFollowService{

    @Autowired
    IFollowRepository iFollowRepository;

    @Autowired
    private IUserMapper iUserMapper;

    @Override
    public UserDTOCount countFollowers(int userId) throws UserIdNotFoundException, UserNotFollowException {
        return iUserMapper.toUserCount(iFollowRepository.getUserById(userId));
    }

}

小评论:我的一个小离题。我建议不要在接口前面加I。IDE可以清楚地显示什么是类,什么是接口,而且在树结构中更容易看到它们,因为不是所有的东西都在“I”下

 类似资料:
  • 我正在使用MapStruct将对象从DTO映射到DTO。我的映射器依赖于一些服务/存储库来从数据库中获取数据,例如,从具有IDs列表的DTo映射到具有其他POJO列表的POJO。为此,我有一个Mapper inteface和一个抽象类Decorator来实现这个接口。我想测试映射器,但我需要模拟装饰器中的服务。我的问题是我怎样才能做到这一点? 现在我知道如果mapper没有那么多依赖项(SOLID

  • 我需要记录各种业务,他们的城市和他们在每个城市的分支机构。每个企业可能在不同的城市,在每个城市可能有不同的分支机构。

  • 我有一个简单的Java单模块Gradle项目,其中我使用Mapstruct进行Java映射。我的如下所示: 我的源文件夹包含以下Java源代码:

  • 映射容器端口到宿主主机的实现 默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。 容器访问外部实现 容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址伪装操作实现的。 查看主机的 NAT 规则。 $ sudo iptables -t nat -nL...Chain POSTROUTING (policy ACCEP

  • 问题内容: 我是一个长期的python开发人员。我正在尝试Go,将现有的python应用程序转换为Go。它是模块化的,对我来说真的很好用。 在Go中创建相同的结构后,我似乎陷入了周期性的导入错误,这比我想要的要多得多。从未在python中出现任何导入问题。我什至不必使用导入别名。所以我可能有一些在python中不明显的周期性导入。我实际上发现那个奇怪。 无论如何,我迷路了,试图在Go中修复这些问题

  • 基于文档(4.7.6 -了解特定的依赖关系),我们可以通过指定配置本身来了解特定的配置。在示例中,他们将配置< code>compile用作不推荐使用的配置。我试图重现相同的命令,将< code>build.gradle中的< code>compile配置替换为< code>implementation配置(正如我所得到的,我们不应该再使用< code>compile)。但是当我跑的时候: Gra