我正在Spring网站上关注此SpringBoot Demo,以了解如何创建一个可以接受上传的文件。我收到一条错误消息:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.example.springdemouploadingfiles.FileUploadController required a bean of type 'com.example.springdemouploadingfiles.storage.StorageService' that could not be found.
Action:
Consider defining a bean of type 'com.example.springdemouploadingfiles.storage.StorageService' in your configuration.
Execution failed for task ':bootRun'.
Process 'command '/Applications/IntelliJ IDEA CE.app/Contents/jbr/Contents/Home/bin/java'' finished with non-zero exit value 1
@Bean
批注来修复它。 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
build.gradle @Service
批注。 @Component
。 @ComponentScan("com.example.springdemouploadingfiles")
上方添加SpringDemoUploadingFilesApplication.java
注释。无论如何,我很乐意帮助您解决此错误,以便我可以运行演示。以下是我的配置。
build.gradle
plugins {
id 'org.springframework.boot' version '2.2.6.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
FileUploadController.java
@Controller
public class FileUploadController {
private final StorageService storageService;
@Autowired
public FileUploadController(StorageService storageService) {
this.storageService = storageService;
}
SpringDemoUploadingFilesApplication.java
@SpringBootApplication
@EnableConfigurationProperties(StorageProperties.class)
public class SpringDemoUploadingFilesApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDemoUploadingFilesApplication.class, args);
}
@Bean
CommandLineRunner init(StorageService storageService) {
return (args) -> {
storageService.deleteAll();
storageService.init();
};
}
}
StorageService接口
@Service
public interface StorageService {
// implements interface.
}
答案 0 :(得分:1)
我一直在用这个自己的头撞在砖墙上,我认为这个特定的教程只是一点点……嗯。
它声称您可以从头开始执行所有步骤,就像从GitHub下载源代码一样。
与大多数Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都可以使用工作代码。
但是,稍后它会明确指出(在“创建文件上传控制器”部分)...
初始应用程序已经包含一些用于处理在磁盘上存储和加载上载文件的类。它们都位于com.example.uploadingfiles.storage包中。您将在新的FileUploadController中使用它们
因此,这里偏离了最初的前提,因为您从GitHub下载的源代码的./initial目录中有类,但本教程中未提及。
将这些文件从com.example.uploadingfiles.storage
类路径复制到您的项目后,它将正确编译。
答案 1 :(得分:0)
您可能缺少StorageService
的实现:
您将需要提供StorageService,以便控制器可以与存储层(例如文件系统)进行交互。以下清单(来自src / main / java / com / example / uploadingfiles / storage / StorageService.java)显示了该接口:
您可以开始:
@Service
public class StorageServiceImpl implements StorageService {
// Implement all the methods from StorageService.
}
答案 2 :(得分:0)
也许您可以尝试添加如下所示的@ComponentScan("com.example.springdemouploadingfiles")
,这是在Spring Boot中明确提到您应该扫描该程序包
@ComponentScan("com.example.springdemouploadingfiles")
@SpringBootApplication
@EnableConfigurationProperties(StorageProperties.class)
public class SpringDemoUploadingFilesApplication {
//all above processes here
}
答案 3 :(得分:0)
我有一个类似的错误,一切似乎都是正确的。一切都是正确的。我通过在Eclipse IDE中运行maven clean和maven Build解决了这一问题。 如果在运行maven clean和maven Build时遇到错误,我邀请您查看此信息(如果您使用Eclipse IDE,则): Spring Maven clean error - The requested profile "pom.xml" could not be activated because it does not exist