You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中MapStruct空指针异常的修复方法

修复MapStruct Mapper初始化导致的NullPointerException问题

1. 让Spring管理MapStruct Mapper实例

在UserMapper的@Mapper注解中添加componentModel = "spring"属性,MapStruct会自动生成带有@Component注解的实现类,让Spring能够扫描并注入该实例:

import org.mapstruct.Mapper;

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

    User mapUserDTOtoUser(UserDTO userDTO);

    UserDTO mapUsertoUserDTO(User user);
}

2. 确保编译生成Mapper实现类

执行mvn clean compile命令触发注解处理器工作,编译完成后可在target/generated-sources/annotations目录下找到生成的UserMapperImpl类,确认该类带有@Component注解,说明生成正常。你的pom.xml配置已经包含了MapStruct处理器、Lombok及绑定插件,这部分无需修改。

3. 修正测试类的Mapper依赖

测试代码中需要确保UserMapper被正确Mock并注入到服务类中,避免因为Mapper实例为null导致报错:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.Optional;

import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertNotNull;

@ExtendWith(MockitoExtension.class)
public class UserServiceImplTest {

    @Mock
    private UserRepository userRepository;

    @Mock
    private UserMapper userMapper;

    @InjectMocks
    private UserServiceImpl userService;

    @Test
    public void userDtoById() {
        // given
        User user = new User();
        user.setId(1L);

        UserDTO userDTO = new UserDTO();
        userDTO.setId(1L);

        when(userRepository.findById(1L)).thenReturn(Optional.of(user));
        when(userMapper.mapUsertoUserDTO(user)).thenReturn(userDTO);

        // when
        UserDTO result = userService.getUserById(1L);

        // then
        assertNotNull(result);
    }
}

4. 验证组件扫描范围

如果Mapper所在包不在Spring默认扫描范围内,需要在项目启动类上添加@ComponentScan注解指定Mapper所在包路径,确保Spring能发现并初始化Mapper实例。


内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:13:30