'Field required a bean of type that could not be found.' Spring 找不到我的存储库界面
'Field required a bean of type that could not be found.' Spring can't find my repository interface
我正在尝试启动我的 Spring webapp 框架和 运行 以便我可以开始测试 POST 请求等。但是,构建器抛出异常:
Description:
Field repository in
com.internal.signing.model.SigningOrder.SigningOrder required a bean
of type
'com.internal.signing.model.SigningOrder.SigningOrderRepository' that
could not be found.
Action:
Consider defining a bean of type
'com.internal.signing.model.SigningOrder.SigningOrderRepository' in
your configuration.
我确实有一个 class com.internal.signing.model.SigningOrder.SigningOrderRepository
。我应该在什么情况下定义这个 bean?我的项目结构定义如下。有一个类似的问题 ,但答案不适用于我的情况(或者我认为如此)。
└── com
└── internal
└── signing
├── Application.java
├── controller
│ └── SigningOrderController.java
└── model
└── SigningOrder
├── SigningOrder.java
└── SigningOrderRepository.java
我的SigningOrderController.java
:
package com.internal.signing.controller;
import com.internal.signing.model.SigningOrder.SigningOrder;
import com.internal.signing.model.SigningOrder.SigningOrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SigningOrderController {
@Autowired
private SigningOrderRepository repo;
@PostMapping("/send")
@ResponseBody
public String foo()
{
Iterable<SigningOrder> orders = repo.findAll();
return orders.toString();
}
}
我的SigningOrder.java
:
package com.internal.signing.model.SigningOrder;
import com.internal.signing.model.Notification;
import com.internal.signing.model.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import java.io.Serializable;
import java.util.List;
@Component
@Entity
public class SigningOrder implements Serializable {
@Autowired
private SigningOrderRepository repository;
@GeneratedValue
private int id;
private List<Subject> listOfSubjects;
.
private List<String> authenticationMethods;
private List<String> signingMethods;
private List<Notification> listofNotifications;
//Getters and setters
}
我的SigningOrderRepository.java
:
package com.internal.signing.model.SigningOrder;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;
@Service //This was a tip in an answer with many upvotes in the linked questions. I have tried with
// "@Repository" annotation as well, but to no avail.
public interface SigningOrderRepository extends CrudRepository<SigningOrder, Integer> {
}
我的Application.java
:
package com.internal.signing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("In application");
}
}
变化:
@Component
@Entity
public class SigningOrder implements Serializable {
@Autowired
private SigningOrderRepository repository;
@GeneratedValue
private int id;
private List<Subject> listOfSubjects;
private List<String> authenticationMethods;
private List<String> signingMethods;
private List<Notification> listofNotifications;
//Getters and setters
}
到
@Entity
public class SigningOrder implements Serializable {
@GeneratedValue
private int id;
private List<Subject> listOfSubjects;
private List<String> authenticationMethods;
private List<String> signingMethods;
private List<Notification> listofNotifications;
//Getters and setters
}
并且您需要扩展 Spring 配置以添加以下注释:
@EnableJpaRepositories(basePackages = {"com.internal.signing.model"})
@EntityScan(value = {"com.internal.signing.model"})
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("In application");
}
}
我正在尝试启动我的 Spring webapp 框架和 运行 以便我可以开始测试 POST 请求等。但是,构建器抛出异常:
Description:
Field repository in com.internal.signing.model.SigningOrder.SigningOrder required a bean of type 'com.internal.signing.model.SigningOrder.SigningOrderRepository' that could not be found.
Action:
Consider defining a bean of type 'com.internal.signing.model.SigningOrder.SigningOrderRepository' in your configuration.
我确实有一个 class com.internal.signing.model.SigningOrder.SigningOrderRepository
。我应该在什么情况下定义这个 bean?我的项目结构定义如下。有一个类似的问题
└── com
└── internal
└── signing
├── Application.java
├── controller
│ └── SigningOrderController.java
└── model
└── SigningOrder
├── SigningOrder.java
└── SigningOrderRepository.java
我的SigningOrderController.java
:
package com.internal.signing.controller;
import com.internal.signing.model.SigningOrder.SigningOrder;
import com.internal.signing.model.SigningOrder.SigningOrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SigningOrderController {
@Autowired
private SigningOrderRepository repo;
@PostMapping("/send")
@ResponseBody
public String foo()
{
Iterable<SigningOrder> orders = repo.findAll();
return orders.toString();
}
}
我的SigningOrder.java
:
package com.internal.signing.model.SigningOrder;
import com.internal.signing.model.Notification;
import com.internal.signing.model.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import java.io.Serializable;
import java.util.List;
@Component
@Entity
public class SigningOrder implements Serializable {
@Autowired
private SigningOrderRepository repository;
@GeneratedValue
private int id;
private List<Subject> listOfSubjects;
.
private List<String> authenticationMethods;
private List<String> signingMethods;
private List<Notification> listofNotifications;
//Getters and setters
}
我的SigningOrderRepository.java
:
package com.internal.signing.model.SigningOrder;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;
@Service //This was a tip in an answer with many upvotes in the linked questions. I have tried with
// "@Repository" annotation as well, but to no avail.
public interface SigningOrderRepository extends CrudRepository<SigningOrder, Integer> {
}
我的Application.java
:
package com.internal.signing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("In application");
}
}
变化:
@Component
@Entity
public class SigningOrder implements Serializable {
@Autowired
private SigningOrderRepository repository;
@GeneratedValue
private int id;
private List<Subject> listOfSubjects;
private List<String> authenticationMethods;
private List<String> signingMethods;
private List<Notification> listofNotifications;
//Getters and setters
}
到
@Entity
public class SigningOrder implements Serializable {
@GeneratedValue
private int id;
private List<Subject> listOfSubjects;
private List<String> authenticationMethods;
private List<String> signingMethods;
private List<Notification> listofNotifications;
//Getters and setters
}
并且您需要扩展 Spring 配置以添加以下注释:
@EnableJpaRepositories(basePackages = {"com.internal.signing.model"})
@EntityScan(value = {"com.internal.signing.model"})
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("In application");
}
}