Конечные точки REST репозиториев, расширяющие MongoRepository, не отображаются - PullRequest
0 голосов
/ 15 мая 2019

Я реализовал Spring Data Repositories, который расширяет MongoRepository аннотацией @RepositoryRestResource, чтобы пометить их как конечные точки REST.Но когда идентификатор запроса сопоставлен, получается следующее исключение

java.lang.IllegalArgumentException: Couldn't find PersistentEntity for type class io.sample.crm.models.Merchant!

Репозиторий:

@RepositoryRestResource(collectionResourceRel = "account",path = "account")
public interface MerchantRepository extends MongoRepository<Merchant,String> { 

}

Запрос GET, который я пытаюсь выполнить:

http://localhost:9090/crm/account/

Ответ:

{
"cause": null,
"message": "Couldn't find PersistentEntity for type class io.apptizer.crm.apptizercrmservice.models.Merchant!"
}

Плюс Я настроил две базы данных для каждого моего репозитория.

Файл application.yml:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration

mongodb:
   primary:
     host: 127.0.0.1
     port: 27017
     database: db_sample_admin_crm
      rest:
        base-path: /crm
   secondary:
     host: 127.0.0.1
     port: 27017
     database: sample_lead_forms
       rest:
         base-path: /reports

Основной класс:

@SpringBootApplication(scanBasePackages = "io.example")
@Configuration
@ComponentScan({"io.example"})
@EntityScan("io.example")
public class App {

public static void main(String[] args) throws Exception {
    SpringApplication.run(App.class, args);
    InitAuth.initialize();
    InitAuth.generateToken();
  }
}

Что здесь может пойти не так?

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Когда у меня возникла та же проблема, я изменил @Id на тип Long.

Пожалуйста, проверьте, что extends MongoRepository<Merchant,String> совпадает с идентификатором Merchant.

0 голосов
/ 15 мая 2019

Сначала проверьте, правильно ли добавлены все зависимости. Необходимы следующие зависимости:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
         </dependency>

В ответе об ошибке указано, что Couldn't find PersistentEntity for type class io.apptizer.crm.apptizercrmservice.models.Merchant!, поэтому класс Merchant может отсутствовать в classpath, а объект домена -не быть идентифицированным к веснеПопробуйте указать класс сущности для продавца, например:

public class Merchant{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

@RepositoryRestResource(collectionResourceRel = "account", path = "account")
public interface MerchantRepository extends MongoRepository<Merchant, String> {

    List<Person> findByLastName(@Param("name") String name);

}

. После этого проверьте, правильно ли вы предоставили все аннотации. Попробуйте добавить контроллер для сканирования компонентов в основном приложении:

@SpringBootApplication
@EnableMongoRepositories("com.example.MerchantRepository")
@ComponentScan(basePackages = {"com.example"})
@EntityScan("com.example.mongo.Merchant")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@ComponentScan говорит Spring искать другие компоненты, конфигурации и службы в пакете, позволяя ему найти контроллеры.

См. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...