API REST: org.springframework.beans.factory.UnsatisfiedDependencyException: - PullRequest
0 голосов
/ 03 мая 2020

Я создаю REST API и, похоже, не могу избавиться от org.springframework.beans.factory.UnsatisfiedDependencyException, я не могу определить проблему в этом. Я буду признателен за глубокое понимание этого.

ps: используя mon go DB для этого

сначала отключите полную ошибку

2020-05-04 01:16:31.468  WARN 14412 
--- [           main] ConfigServletWebServerApplicationContext : 
Exception encountered during context initialization - 
cancelling refresh attempt: 
org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'productController': 
Unsatisfied dependency expressed through field 'productService'; 
nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException:
 Error creating bean with name 'productServiceImpl':
 Unsatisfied dependency expressed through field 'productRepo'; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'productRepo': 
Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException:
 No property id found for type Product!

public class Product {

    @Id
    private int ProductId;

// and other variables plus setters and getters 
@Repository
public interface ProductRepo extends MongoRepository<Product, String> {

   // methods
}

public interface ProductService {
 // methods
}


@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductRepo productRepo;

// implementations
}

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Попробуйте изменить класс Product следующим образом:

@Entity
public class Product {

    @Id
    private String productId; // MongoRepository<Product, String>

    // methods
}

В классе Product аннотация @Entity отсутствует, а productId должно быть String, как указано в хранилище.

Или измените на extends MongoRepository<Product, Integer>, если хотите сохранить текущий тип поля.

В любом случае они должны совпадать.

0 голосов
/ 04 мая 2020

Сделайте так, чтобы приложение Spring знало, где находятся ваши классы. Используйте @ComponentScan(basePackages = "com.package").

Более того, если ваш класс продукта - это то, что вы хотите сохранить, пометьте его @Entity, чтобы Spring узнал об этом и создал из него боб.

Отметьте свой интерфейс ProductService с @service, так что Spring знает об этом.

0 голосов
/ 03 мая 2020

Возможно, проблема в том, что Spring не знает, какой дочерний экземпляр будет инициализирован по умолчанию для интерфейсов. попробуйте использовать @Configuration в классах Impl и измените интерфейсы на service`

 @Service
 public interface ProductService {
 // methods
 }

@Configuration
public class ProductServiceImpl implements ProductService {

// implementations
}

`

...