首页 > 解决方案 > 将域实体和一些列表映射到 Dto 对象

问题描述

我想使用 modelMapper 因为域实体与 dto 对象匹配。但是有一些问题。在 dto 对象中,它有一些数组列表,如 orderList、codeList....

这是我的代码

这是用户、userDto、userServiceImpl 与我的对象和服务相比的示例代码。

// it is my User domain
@Data
@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer seq;

    @ManyToOne
    @JoinColumn(name="role_seq")
    private Role role;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;
}

// it is my UserDto
@Data
public class UserDto {
    private Integer userSeq;
    private Integer roleSeq;
    private String firstName;
    private String lastName;
    private List<Integer> orderList = new ArrayList<>();
    private List<String> codeList = new ArrayList<>();
}

// and Last it is service layer
@Service
public class UserServiceImpl implements UserService {
    @Override
    public UserDto getUserDto(Integer userSeq) {
        User user = userRepository.findBySeq(userSeq);
        List<UserCode> userCodeList = userCodeRepository.findAllByUserSeqOrderByOrderNoAscNullsLast(userSeq);

        ModelMapper modelMapper = new ModelMapper();
        UserDto userDto = modelMapper.map(user, UserDto.class);

        for (int i = 0; i < userCodeList.size(); i++) {
            userDto.getOrderList().add(userCodeList.get(i).getOrderNo()); // I don't like this code...
            userDto.getCodeSeqList().add(userCodeList.get(i).getCode().getCodeName()); // I don't like this code too...
        }

        PropertyMap<User, UserDto> userToUserDtoPropertyMap = new PropertyMap<User, UserDto>() {
            protected void configure() {
                map().setUserSeq(source.getSeq());
                map().setRoleSeq(source.getRole().getSeq()); // I don't know why it is not mapping...
            }
        };
        modelMapper.addMappings(userToUserDtoPropertyMap);

        return userDto;
    }
}

在示例中,只有两个列表,但在我的代码中是 7 个列表。我只想使用映射器而不是“获取和添加”。请帮助我...我该如何解决?

标签: javaspringspring-bootdto

解决方案


您可以使用 jsonignoreproperties 注释来忽略 DTO 中缺少的属性。所以它只会填充两者都可用的那些属性。请检查以下使用 ObjectMapper 用于相同目的的 URL。 https://www.thetechnojournals.com/2019/10/entity-object-conversion-to-dto-object.html


推荐阅读