«Для поля требуется компонент типа, который не может быть найден». Spring не может найти мой интерфейс хранилища - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь запустить и запустить мой скелет Spring Spring, чтобы я мог начать тестирование POST-запросов и т. Д. Однако сборщик выдает исключение:

Описание:

Полевой репозиторий в com.internal.signing.model.SigningOrder.SigningOrder требуется компонент типа 'com.internal.signing.model.SigningOrder.SigningOrderRepository', который не может быть найден.

Действие:

Рассмотрим определение бина типа 'com.internal.signing.model.SigningOrder.SigningOrderRepository' в ваша конфигурация.

У меня действительно есть класс com.internal.signing.model.SigningOrder.SigningOrderRepository. В каком контексте я должен определить этот боб? Моя структура проекта определена ниже. Здесь есть аналогичный вопрос здесь , но ответы не относятся к моему делу (или я так думаю).

└── 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");
    }
}

1 Ответ

0 голосов
/ 03 июля 2018

Изменение:

@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 Config, чтобы добавить следующие аннотации:

@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");
    }
}
...