我遵循了上传文件的教程,但我最终出现以下错误:
Parameter 0 of constructor in nu.pk.cv.storage.FileSystemStorageService required a bean of type 'nu.pk.cv.storage.StorageProperties' that could not be found.
Action:
Consider defining a bean of type 'nu.pk.cv.storage.StorageProperties' in your configuration
我知道我所做的唯一区别是,我使用@RestController
,而不仅仅是@Controller
并且我的控制器在另一个子包中,而不是在父包中。我的存储类位于 nu.pk.cv.存储
中,而我的控制器位于 nu.pk.cv.cv
。
存储属性
package nu.pk.cv.storage;
@ConfigurationProperties("storage")
public class StorageProperties {
private String location = "/tmp/cv-gen";
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
文件系统存储服务
package nu.pk.cv.storage;
@Service
public class FileSystemStorageService implements StorageService {
private final Path rootLocation;
@Autowired
public FileSystemStorageService(StorageProperties properties) {
this.rootLocation = Paths.get(properties.getLocation());
}
@Override
public void store(MultipartFile file) {
String filename = StringUtils.cleanPath(file.getOriginalFilename());
try {
if (file.isEmpty()) {
throw new StorageException("Failed to store empty file " + filename);
}
if (filename.contains("..")) {
// This is a security check
throw new StorageException(
"Cannot store the file with relative path outside the current directory "
+ filename);
}
try (InputStream inputStream = file.getInputStream()) {
Files.copy(inputStream, this.rootLocation.resolve(filename),
StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e) {
throw new StorageException("Failed to store file " + filename, e);
}
}
@Override
public Stream<Path> loadAll() {
try {
return Files.walk(this.rootLocation, 1)
.filter(path -> !path.equals(this.rootLocation))
.map(this.rootLocation::relativize);
}
catch (IOException e) {
throw new StorageException("Failed to read stored files", e);
}
}
@Override
public Path load(String filename) {
return rootLocation.resolve(filename);
}
@Override
public Resource loadAsResource(String filename) {
try {
Path file = load(filename);
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;
}
else {
throw new StorageFileNotFoundException(
"Could not read file: " + filename);
}
}
catch (MalformedURLException e) {
throw new StorageFileNotFoundException("Could not read file: " + filename, e);
}
}
@Override
public void deleteAll() {
FileSystemUtils.deleteRecursively(rootLocation.toFile());
}
@Override
public void init() {
try {
Files.createDirectories(rootLocation);
}
catch (IOException e) {
throw new StorageException("Could not initialize storage", e);
}
}
}
我的控制器
package nu.pk.cv.cv;
@RestController
public class CV {
@Autowired
private StorageService storageService;
@PostMapping("/api/cv/generate")
public String generate(@RequestParam("files") MultipartFile file) {
storageService.store(file);
return "Mjau";
}
}
如果需要构造函数注入(例如对于lombok或missing setters ),必须在类型级别或特定构造函数(如果有多个)上用< code>@ConstructorBinding声明它。
@Configuration
@ConfigurationProperties("storage")
@ConstructorBinding
public class StorageProperties{
or
@Configuration
@ConfigurationProperties("storage")
public class StorageProperties{
public StorageProperties(){...}
@ConstructorBinding
public StorageProperties(String location){this.location = location; ...}
在存储属性类中添加注释@Configuration或@Component。
@Configuration
@ConfigurationProperties("storage")
public class StorageProperties {
或者
@Component
@ConfigurationProperties("storage")
public class StorageProperties {
如果您收到类似“未找到bean或配置类型bean”的错误,则必须检查相关类中的@Component、@Service或@Repository注释。
参考:Spring博客
根据Baeldung文章,您还需要将@Configuration
添加到您的类中:
@Configuration
@ConfigurationProperties("storage")
public class StorageProperties
我不确定我的代码有什么问题。我试着学习Spring Boot WebFlux。但我无法运行应用程序,因为我得到以下错误: com.thomsoncodes.todo.controller.ToDoController中构造函数的参数0需要一个类型为“com.thomsoncodes.todo.repository.ToDoRespository”的bean,但找不到该bean 疲惫@Autowir
我正在创建一个,其中任何客户端都可以提交请求,这些请求可以是、、、。 但是在创建这个应用程序时,我遇到了以下错误: 我的应用程序的结构是: 我尝试用、、注释,但仍然得到相同的错误。 我甚至从这些答案中尝试了解决方案: (1)构造函数的参数0需要一个类型为'java.lang.String'的bean,但找不到该bean 但我仍然无法解决我的问题。
我想有一个SSO CAS认证,我已经按照Bealdung的教程(https://www.baeldung.com/spring-security-cas-sso第4部分)的说明,但当我作为Spring启动应用程序运行时,我有这个错误 SecurityConfig中构造函数的参数0需要找不到类型为“org.springframework.security.cas.authentication.Cas
我是Spring启动的新手,我无法从我的Spring启动书中获取示例来工作。这是代码 描述: Thomas中构造函数的参数0。ChapterController需要一个 行动: 考虑定义一个“Thomas”类型的bean。在你的配置中。 章节.java 第章存储库.java LoadDatabase.Java 章节控制器.java ThomasSpringApplication.java
运行应用程序后控制台显示的错误粘贴在下面 套餐下有3个等级 bduckapp1application.java<-SpringBoot应用程序 bducktrigger.java<-restcontrol oss.java<-data类 pom.xml 我尝试了各种stackoverflow文章中针对类似错误提到的所有解决方案。建议将这些类移动到与类相同的文件夹中,或者包含具有它属性的包。没有一个
以下是服务: 下面是映射器: