Сопоставитель из Mapstruct не сопоставляет список объектов со списком DtoJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сопоставитель из Mapstruct не сопоставляет список объектов со списком Dto

Сообщение Anonymous »

У меня есть класс Rent с полем «Список игр», RentDto с полем «Список игр». И RentMapper, как показано ниже.
Но когда я тестирую с помощью почтальона, метод get возвращает игры в виде пустого массива. Я не понимаю, почему в методе createRent точнее в prepareRentToSave я устанавливаю игры. Метод POST возвращает правильный json (список типа GameDto), но метод GET возвращает пустой массив для свойства games

@Component
@Mapper(componentModel = "spring")
public interface RentMapper {
@Mappings({
@Mapping(target = "games", source = "games",qualifiedByName = "mapGamesToGamesDto")
})
RentDto fromRentToRentDto(Rent source);

@Mapping(target = "games", source = "games")
Rent fromRentDtoToRent(RentDto source);

Rent updateFromRentUpdateDtoToRent(@MappingTarget Rent entity, RentUpdateDto update);

default GameDto fromGameToGameDto(Game game) {
return Mappers.getMapper(GameMapper.class).fromGameToGameDto(game);
}
@Named("mapGamesToGamesDto")
default List mapGamesToGamesDto(List games){
List gameDtoList = new ArrayList();
for(Game game:games){
gameDtoList.add(fromGameToGameDto(game));
}
return gameDtoList;
}

}

метод службы для создания арендной платы
@Transactional
public RentDto createRent(RentCreationDto rentCreationDto) {

List gamesIdToRent = rentCreationDto.getGames();
List chosenGamesToRent = new ArrayList();

boolean isGameRented = false;

User user = userRepository.findByUsername(rentCreationDto.getUsername()).orElseThrow(() ->
new EntityNotFoundException(EntityNotFoundException.ENTITY_USER_NOT_FOUND, rentCreationDto.getUsername()));

StringBuilder message = new StringBuilder();

for (Long gameId : gamesIdToRent) {
Game gameToRent = gameRepository.findById(gameId).orElseThrow(() ->
new EntityNotFoundException(EntityNotFoundException.ENTITY_GAME_NOT_FOUND_BY_ID, String.valueOf(gameId)));
if (gameToRent.getStatus().equals(GameStatus.AVAILABLE)) {
gameToRent.setStatus(GameStatus.RENTED);
chosenGamesToRent.add(gameToRent);
gameRepository.save(gameToRent);
isGameRented = true;
} else {
message.append(gameToRent.getTitle()).append(" ");
}

}

if (isGameRented) {
Rent rentToSave=prepareRentToSave(rentCreationDto, chosenGamesToRent, user);
Rent savedRent = rentRepository.save(rentToSave);
return rentMapper.fromRentToRentDto(savedRent);
} else {
throw new GameNotAvailableException(GameNotAvailableException.NOT_AVAILABLE_MESSAGE, message.toString());
}
}

private static Rent prepareRentToSave(RentCreationDto rentCreationDto, List chosenGamesToRent, User user) {
Rent rentToSave = new Rent();
rentToSave.setCreationTs(LocalDateTime.now());
rentToSave.setStartDate(rentCreationDto.getStartDate());
rentToSave.setEndDate(rentCreationDto.getStartDate().plusDays(7));
rentToSave.setGames(chosenGamesToRent);
rentToSave.setUser(user);
rentToSave.setStatus(RentStatus.ACTIVE);
rentToSave.setSettled(false);
rentToSave.setUpdateTs(LocalDateTime.now());
rentToSave.setCost(BigDecimal.valueOf(20.00));
return rentToSave;
}

Я добавил метод вqualByName, который сопоставляет список игр со списком GameDto. Запустите mvn clean install, но id вообще не помог
Аренда
@Data
@Entity
@Table(name = "rents")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Rent {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;

@OneToMany(mappedBy = "rent", cascade = CascadeType.ALL, orphanRemoval = true)
private List games;
...

Игра
public class Game {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "rent_id")
public Rent rent;



Подробнее здесь: https://stackoverflow.com/questions/790 ... ist-of-dto
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»