【发布时间】:2020-10-17 22:36:24
【问题描述】:
我目前正在学习有关 Spring Boot 的课程并制作 Reddit 克隆。 https://www.youtube.com/watch?v=DKlTBBuc32c
在课程中,我们有一个使用 Mapstruc 映射 DTO 的服务。
我的问题是,当我尝试将映射器注入服务时,Spring 找不到该类并给出错误:
Parameter 1 of constructor in com.subreddit.service.SubredditService required a bean of type 'com.subreddit.mapper.SubredditMapper' that could not be found.
Consider defining a bean of type 'com.subreddit.mapper.SubredditMapper' in your configuration.
这里是服务:
package com.subreddit.service;
import static java.util.stream.Collectors.toList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.subreddit.dto.SubredditDto;
import com.subreddit.exceptions.SpringRedditException;
import com.subreddit.mapper.SubredditMapper;
import com.subreddit.model.Subreddit;
import com.subreddit.repository.SubredditRepository;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Service
@AllArgsConstructor
@Slf4j
public class SubredditService {
private final SubredditRepository subredditRepository;
private SubredditMapper subredditMapper;
@Transactional
public SubredditDto save(SubredditDto subredditDto) {
Subreddit save = subredditRepository.save(subredditMapper.mapDtoToSubreddit(subredditDto));
subredditDto.setId(save.getId());
return subredditDto;
}
@Transactional(readOnly = true)
public List<SubredditDto> getAll() {
return subredditRepository.findAll()
.stream()
.map(subredditMapper::mapSubredditToDto)
.collect(toList());
}
public SubredditDto getSubreddit(Long id) {
Subreddit subreddit = subredditRepository.findById(id)
.orElseThrow(() -> new SpringRedditException("No subreddit found with ID - " + id));
return subredditMapper.mapSubredditToDto(subreddit);
}
}
这是映射器:
package com.subreddit.mapper;
import java.util.List;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import com.subreddit.dto.SubredditDto;
import com.subreddit.model.Post;
import com.subreddit.model.Subreddit;
import lombok.RequiredArgsConstructor;
@Mapper(componentModel = "spring")
public interface SubredditMapper {
@Mapping(target = "numberOfPosts", expression = "java(mapPosts(subreddit.getPosts()))")
SubredditDto mapSubredditToDto(Subreddit subreddit);
default Integer mapPosts(List<Post> numberOfPosts) {
return numberOfPosts.size();
}
@InheritInverseConfiguration
@Mapping(target = "posts", ignore = true)
Subreddit mapDtoToSubreddit(SubredditDto subredditDto);
}
【问题讨论】:
-
从这里获取他们的代码:github.com/SaiUpadhyayula/spring-reddit-clone 并运行它。
标签: java spring spring-boot