java - 构造函数需要一个无法找到的 bean 类型

标签 java spring spring-boot

我目前正在学习 Spring Boot 类(class)并制作 Reddit 克隆。 https://www.youtube.com/watch?v=DKlTBBuc32c

在类(class)中,我们有一个使用 Mapstruc 来映射 DTO 的服务。

我的问题是,当我尝试将映射器注入(inject)到服务中时,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);
}

最佳答案

我看到了他们的代码。它正在发挥作用。您没有很好地遵循步骤。

here 获取他们的代码。 比较一下你做错了什么。

可能的问题:问题出在包名称上。 @ComponentScan 无法从该包注册 bean,因为您在不知不觉中发送了错误的包名称。

关于java - 构造函数需要一个无法找到的 bean 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62609760/

相关文章:

java - 数据未通过 jtable 保存在数据库中(已编辑)

java - 在java中一次搜索两个字符串

java - org.dbunit.dataset.NoSuchTableException错误DatabaseDataSet-未找到表“行程”

spring - global-method-security 适用于某些 bean,但不适用于使用 spring security 的其他 bean

java - Spring Cloud Vault错误: nested exception is javax.net.ssl.SSLHandshakeException:扩展名(5)不应出现在certificate_request中

SpringBoot 使用高级休息客户端进行简单的分段文件上传(Chrome)

java - 将库保存在应用程序库中还是在 common/lib 中更好?

java - 具有身份验证的 Spring Boot 项目结构

jpa - 架构验证 : missing table [game]

spring-boot - 如何为特定客户端设置自定义 Feign RequestInterceptor?