【问题标题】:@Mapping @Mapper Error No source parameter(s) exists@Mapping @Mapper 错误不存在源参数
【发布时间】:2020-05-10 15:49:16
【问题描述】:

我一直在将我的项目从 Spring 转移到 Spring Boot 并引入嵌入式 tomcat,我必须做一些调整我在旧项目中面临的唯一问题是我有 Mapper 接口。

当我编译项目时它开始报错

错误:(12, 5) java: 源参数中不存在名为“schoolId”的属性。

我已经搜索了很多关于它的一些说 lombok 依赖放置在 pom 我尝试将它放置在 ma​​p-struct 依赖之前和之后,但错误仍然在这里

下面是我的课

以下是我面临的错误

【问题讨论】:

  • 您是否删除了目标文件夹中的生成源? @Shermeen
  • @Shermeen 不确定,但据我所知,“目标”指向实体,而您正在定义列而不是那个,因此它会给出错误。试试这个,@Mapping(source = "schoolId", target="school")
  • @Hatice 我也尝试过删除目标文件夹但不起作用
  • @Dhwani 它不能正常工作:(
  • @Shermeen 为什么将 school.schoolId 放在目标字段中?如果这是正确的,为什么另一个目标字段只是 schoolName 而不是 school.schoolName 请用代码更改图像。您可以尝试将 groupDto.schoolId 用于源字段并仅定位 schoolId 吗?

标签: java spring-boot mapping mapstruct


【解决方案1】:

@Shermeen 你能分享你配置的代码吗?

所以我们交叉验证它。我仍然添加此示例,请检查它。

结构

EntityMapper.java

public interface EntityMapper<D, E> {
  E toEntity(D dto);
  D toDTO(E entity);
  List<E> toEntity(List<D> dtoList);
  List<D> toDTO(List<E> entityList);
}

UserMapper.java

import com.ecommerce.auth_service.domain.external_db.User;
import com.ecommerce.auth_service.domain.external_db.dto.UserDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

import java.util.UUID;

@Mapper(componentModel = "spring", uses = {UserMapper.class})
public interface UserMapper extends EntityMapper<UserDTO, User> {

  @Mapping(source = "user_id", target = "user")

  default User fromId(UUID id) {
    if (id == null)
      return null;
    User user = new User();
    user.setUserId(id);
    return user;
  }
}

UserMapperImpl.java

import com.ecommerce.auth_service.domain.external_db.User;
import com.ecommerce.auth_service.domain.external_db.dto.UserDTO;
import com.ecommerce.auth_service.domain.external_db.mapper.UserMapper;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class UserMapperImpl implements UserMapper {
  @Override
  public User toEntity(UserDTO dto) {
    if (dto == null)
      return null;

    User user = new User();
    user.setUserId(dto.getUserId());
    user.setUsername(dto.getUsername());
    user.setEmail(dto.getEmail());
    user.setPassword(dto.getPassword());
    user.setPhoneNo(dto.getPhoneNumber());
    user.setStatus(dto.getStatus());
    user.setStore(dto.getStoreId());
    user.setAuthority(dto.getAuthority());
    user.setPrivileges(dto.getAuthority().getPrivileges());

    return user;
  }

  @Override
  public UserDTO toDTO(User entity) {
    if (entity == null) {
      return null;
    }

    UserDTO userDTO = new UserDTO();

    userDTO.setUserId(entity.getUserId());
    userDTO.setUsername(entity.getUsername());
    userDTO.setEmail(entity.getEmail());
    userDTO.setPassword(entity.getPassword());
    userDTO.setPhoneNumber(entity.getPhoneNo());
    userDTO.setStatus(entity.getStatus());
    userDTO.setStoreId(entity.getStore());

    entity.getAuthority().setPrivileges(entity.getPrivileges());
    userDTO.setAuthority(entity.getAuthority());

    userDTO.setCreatedBy(entity.getCreatedBy());
    userDTO.setCreatedDate(entity.getCreatedDate());
    userDTO.setModifiedBy(entity.getModifiedBy());
    userDTO.setModifiedDate(entity.getModifiedDate());

    return userDTO;
  }

  @Override
  public List<User> toEntity(List<UserDTO> dtoList) {
    if (dtoList == null || dtoList.isEmpty())
      return null;
    List<User> userList = new ArrayList<>(dtoList.size());
    for (UserDTO userDTO : dtoList) {
      userList.add(toEntity(userDTO));
    }
    return userList;
  }

  @Override
  public List<UserDTO> toDTO(List<User> entityList) {
    if (entityList == null)
      return null;
    List<UserDTO> userDTOList = new ArrayList<>(entityList.size());
    for (User user : entityList) {
      userDTOList.add(toDTO(user));
    }
    return userDTOList;
  }
}

【讨论】:

  • 我不知道如何在堆栈上共享我配置的代码,显然代码看起来不错,不知道为什么它无法识别源属性。
【解决方案2】:

我认为您应该重新排序 pom.xml 文件中的 lombokma​​pstruct 依赖项,它可以正常工作。

严格的排序应该是这样的

  1. 龙目岛
  2. 地图结构

【讨论】:

    【解决方案3】:

    我对此有过最深刻的体验。就我而言,我没有在我的 pom.xml 中声明任何 annotationProcessorPaths,我只是在我的 pom 中添加了这样的依赖项:

            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    

    只需重新排序并向上移动 lombok 依赖项即可解决问题:|

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 2013-09-10
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多